{"id":20255484,"url":"https://github.com/tedkulp/vim-config","last_synced_at":"2025-10-08T10:40:02.611Z","repository":{"id":2036795,"uuid":"2973636","full_name":"tedkulp/vim-config","owner":"tedkulp","description":"My vim configuration. It's a WIP.","archived":false,"fork":false,"pushed_at":"2017-05-30T10:55:42.000Z","size":81,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-03T17:47:18.777Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tedkulp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-12-13T16:43:14.000Z","updated_at":"2015-04-26T17:20:05.000Z","dependencies_parsed_at":"2022-08-28T21:10:27.205Z","dependency_job_id":null,"html_url":"https://github.com/tedkulp/vim-config","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tedkulp/vim-config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tedkulp%2Fvim-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tedkulp%2Fvim-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tedkulp%2Fvim-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tedkulp%2Fvim-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tedkulp","download_url":"https://codeload.github.com/tedkulp/vim-config/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tedkulp%2Fvim-config/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278931651,"owners_count":26070788,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T10:38:57.069Z","updated_at":"2025-10-08T10:39:57.590Z","avatar_url":"https://github.com/tedkulp.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ted's custom vim config #\n\nIt's a work in progress. Below is a list of key bindings and notes.\nThe layout and some configurations are based on the [EdgeCase vim\nconfiguration](https://github.com/edgecase/vim-config). I've pulled\nthe basic directory layout and Vundle setup, but kept most of my\nplugin choices and keymaps.\n\nBelow is a list of plugin descriptions and keymap changes.\n\n## Setup ##\n\n1. `git clone git://github.com/tedkulp/vim-config.git`\n2. `cd vim-config`\n3. `sh setup.sh`\n\n_Note_: You can rerun the script again and it will update all the plugins\nto their latest releases.\n\n## Custom Shortcuts ##\n\n* `c-h` Move left one window/buffer\n* `c-j` Move down one window/buffer\n* `c-k` Move up one window/buffer\n* `c-l` Move right one window/buffer\n* `s-up` Resize buffer one line higher\n* `s-down` Resize buffer one line lower\n* `s-left` Resize buffer one column smaller\n* `s-right` Resize buffer one column bigger\n* `\u003cleader\u003ew` Enable word wrapping\n* `\u003cleader\u003eW` Disable word wrapping\n* `\u003cleader\u003ec` Remove trailing whitespace on whole file\n* `\u003cleader\u003espace` Remove search highlight\n* `\u003cleader\u003eI` Reindent entire file\n* `\u003cleader\u003ess` Save all buffers/open files\n* `\u003cleader\u003eBa` Delete all buffers (cap B so it doesn't slow down Buffergator)\n* `F8` Toggle paste when in Insert mode\n* `F9` Toggle between light and dark background mode\n\n## YankRing ##\n\nVim does not provide any mechanism to reference previous yanked, deleted\nor changed text.  In Emacs this feature is called the \"kill ring\".\n\nThe YankRing plugin allows the user to configure the number of yanked,\ndeleted and changed text.  A split window can be used to choose which\nelement(s) from the yankring you wish to paste.  Alternately after\ntext has been pasted (using p), it can be replaced with a previous\nvalue from the yankring with a single key stroke. You can learn more\nabout it with `:help yankring`.\n\n**Cheatsheet**:\n\n* `c-p` to move backwards through the ring\n* `c-n` to move forwards through the ring\n* `:YRShow` Show the current ring\n\n## \"Project Drawer\" aka NERDTree ##\n\nNERDTree is a file explorer plugin that provides \"project drawer\"\nfunctionality to your vim projects.  You can learn more about it with\n`:help NERDTree`.\n\n**Cheatsheet**:\n\nUse `m` on any selected file/dir to bring up a menu of file commands\n\n**Customizations**:\n\nUse `gt` to toggle NERDTree\n\n## NERDCommenter ##\n\nA plugin that allows for easy commenting of code for many filetypes.\nUse `:help nerdcommenter`\n\n**Cheatsheet**:\n\n* `\u003cleader\u003ecc` - Comment out the current line or text selected in visual mode.\n* `\u003cleader\u003ecn` - Same as \u003cleader\u003ecc but forces nesting.\n* `\u003cleader\u003ec\u003cspace\u003e` - Toggles the comment state of the selected line(s).\n  If the topmost selected line is commented, all selected lines are uncommented\n  and vice versa.\n* `\u003cleader\u003eci` - Toggles the comment state of the selected line(s) individually.\n* `\u003cleader\u003ecs` - Comments out the selected lines \"sexily\"\n\nThere are lots more... look at the help\n\n## Ack.vim ##\n\nAck.vim uses ack to search inside the current directory for a pattern.\nYou can learn more about it with :help Ack\n\n**Customizations**:\n\n`g/` to bring up `:Ack `.\n\n## Repeat.vim ##\n\nIf you've ever tried using the `.` command after a plugin map, you were likely disappointed to discover it only repeated the last native command inside that map, rather than the map as a whole. That disappointment ends today. Repeat.vim remaps `.` in a way that plugins can tap into it.\n\nThe following plugins support repeat.vim:\n\n* surround.vim _(installed)_\n* abolish.vim _(installed)_\n* unimpaired.vim _(installed)_\n* speeddating.vim\n* commentary.vim\n\n## indent-object ##\n\nIndent object creates a \"text object\" that is relative to the current\nident. Text objects work inside of visual mode, and with `c` (change),\n`d` (delete) and `y` (yank). For instance, try going into a method in\nnormal mode, and type `v ii`. Then repeat `ii`.\n\n**Cheatsheet**:\n\n* `\u003ccount\u003eai` - (A)n (I)ndentation level and line above.\n* `\u003ccount\u003eii` - (I)nner (I)ndentation level (no line above).\n* `\u003ccount\u003eaI` - (A)n (I)ndentation level and lines above/below.\n* `\u003ccount\u003eiI` - (I)nner (I)ndentation level (no lines above/below).\n\n## text-object-ruby-block ##\n\nWhen textobj-rubyblock is installed you will gain two new text objects,\nwhich are triggered by `ar` and `ir` respectively. These follow Vim convention,\nso that `ar` selects all of a ruby block, and `ir` selects the inner portion\nof a rubyblock.\n\nIn ruby, a block is always closed with the end keyword. Ruby blocks may\nbe opened using one of several keywords, including module, class, def, if,\nand do.\n\n## [Surround](https://github.com/tpope/vim-surround) ##\n\nSurround allows you to modify \"surroundings\" around the current text.\nFor instance, if the cursor was inside `\"foo bar\"`, you could type\n`cs\"'` to convert the text to `'foo bar'`.\n\nThere's a lot more; check it out at `:help surround`\n\n**Cheatsheet**:\n\n* `cs\"'` - Change `\"Hello World\"` to `'Hello World'`\n* `cs'\u003cq\u003e` - Change `'Hello World'` to `\u003cq\u003eHello World\u003c/q\u003e`\n* `cst\"` - Change `\u003cq\u003eHello World\u003c/q\u003e` to `\"Hello World\"`\n* `ds\"` - Remove delimiters from `\"Hello World\"`\n* `ysiw]` - Makes `[Hello] World!` (w/ cursor on Hello -- iw is 'word' text object)\n* `ds]` - Makes `Hello World!` (w/ cursor on Hello)\n* `S(` - Visual mode -- wraps selected text in ( and )\n\n## [Ctrl-P](https://github.com/kien/ctrlp.vim) ##\n\nProvides convenient ways to quickly reach the buffer or file you want.\n\n* `\u003cC-p\u003e` - fuzzy find files\n* `\u003cC-s\u003e` - open selected item in window in horizontal split\n* `\u003cC-v\u003e` - open selected item in vertical split\n* `\u003cC-t\u003e` - open selected item in a new tab\n* `\u003cC-f\u003e` / `\u003cC-b\u003e` - cycle between file, buffer, MRU and \"both\" modes\n* `\u003cf5\u003e` - purge the cache for the current directory\n\n## [Fugitive](https://github.com/tpope/vim-fugitive) ##\n\nI'm not going to lie to you; fugitive.vim may very well be the best\nGit wrapper of all time.  Check out these features:\n\nView any blob, tree, commit, or tag in the repository with `:Gedit` (and\n`:Gsplit`, `:Gvsplit`, `:Gtabedit`, ...).  Edit a file in the index and\nwrite to it to stage the changes.  Use `:Gdiff` to bring up the staged\nversion of the file side by side with the working tree version and use\nVim's diff handling capabilities to stage a subset of the file's\nchanges.\n\nBring up the output of `git status` with `:Gstatus`.  Press `-` to\n`add`/`reset` a file's changes, or `p` to `add`/`reset` `--patch` that\nmofo.  And guess what `:Gcommit` does!\n\n`:Gblame` brings up an interactive vertical split with `git blame`\noutput.  Press enter on a line to reblame the file as it stood in that\ncommit, or `o` to open that commit in a split.  When you're done, use\n`:Gedit` in the historic buffer to go back to the work tree version.\n\n`:Gmove` does a `git mv` on a file and simultaneously renames the\nbuffer.  `:Gremove` does a `git rm` on a file and simultaneously deletes\nthe buffer.\n\nUse `:Ggrep` to search the work tree (or any arbitrary commit) with\n`git grep`, skipping over that which is not tracked in the repository.\n`:Glog` loads all previous revisions of a file into the quickfix list so\nyou can iterate over them and watch the file evolve!\n\n`:Gread` is a variant of `git checkout -- filename` that operates on the\nbuffer rather than the filename.  This means you can use `u` to undo it\nand you never get any warnings about the file changing outside Vim.\n`:Gwrite` writes to both the work tree and index versions of a file,\nmaking it like `git add` when called from a work tree file and like\n`git checkout` when called from the index or a blob in history.\n\nUse `:Gbrowse` to open the current file on GitHub, with optional line\nrange (try it in visual mode!).  If your current repository isn't on\nGitHub, `git instaweb` will be spun up instead.\n\nAdd `%{fugitive#statusline()}` to `'statusline'` to get an indicator\nwith the current branch in (surprise!) your statusline.\n\nOh, and of course there's `:Git` for running any arbitrary command.\n\n**Customizations**:\n\n* Binds `\u003cleader\u003egb` to `:Gblame`\n* Binds `\u003cleader\u003egs` to `:Gstatus`\n* Binds `\u003cleader\u003egd` to `:Gdiff`\n* Binds `\u003cleader\u003egl` to `:Glog`\n* Binds `\u003cleader\u003egc` to `:Gcommit`\n* Binds `\u003cleader\u003egp` to `:Git push`\n\n## [ZoomWin](http://github.com/vim-scripts/ZoomWin) ##\n\nWhen working with split windows, ZoomWin lets you zoom into a window and\nout again using `\u003cC-W\u003e o`\n\n**Customizations**:\n\n* Binds `\u003cleader\u003ez` to `:ZoomWin`\n\n## [Bufexplorer](http://www.vim.org/scripts/script.php?script_id=42) ##\n\nWith bufexplorer, you can quickly and easily switch between buffers by using\nthe one of the default public interfaces:\n\n`\u003cleader\u003ebe` (normal open)  or\n`\u003cheader\u003ebs` (force horizontal split open)  or\n`\u003cleader\u003ebv` (force vertical split open)\n\nOnce the bufexplorer window is open you can use the normal movement keys (hjkl)\nto move around and then use `\u003cEnter\u003e` or `\u003cLeft-Mouse-Click\u003e` to select the\nbuffer you would like to open. If you would like to have the selected buffer\nopened in a new tab, simply press either `\u003cShift-Enter\u003e` or `t`. Please note\nthat when opening a buffer in a tab, that if the buffer is already in another\ntab, bufexplorer can switch to that tab automatically for you if you would\nlike.  More about that in the supplied VIM help.\n\n## [EasyMotion](https://github.com/Lokaltog/vim-easymotion) ##\n\nEasyMotion provides a much simpler way to use some motions in vim. It takes the\nout of w or f{char} by highlighting all possible choices and allowing you to\npress one key to jump directly to the target.\n\nWhen one of the available motions is triggered, all visible text preceding or\nfollowing the cursor is faded, and motion targets are highlighted.\n\nEasyMotion is triggered by one of the provided mappings.\n\ncheck EasyMotion's [home page](https://github.com/Lokaltog/vim-easymotion) for more information.\n\n## [Supertab](https://github.com/ervandew/supertab) ##\n\nSupertab aims to provide tab completion to satisfy all your insert completion\nneeds (:help ins-completion).\n\n**Customizations**:\n\n* __(switch tab and c-tab)__\n* Binds `\u003ctab\u003e` to `g:SuperTabMappingTabLiteral`\n* Binds `\u003cc-tab\u003e` to `g:SuperTabMappingForward`\n\n## [BufOnly](http://www.vim.org/scripts/script.php?script_id=1071) ##\n\n`:BufOnly` without an argument will unload all buffers but the current one. `:BufOnly`\nwith an argument will close all buffers but the supplied buffer name/number.\n\n**Customizations**:\n\n* Binds `\u003cleader\u003eBo` to `:BufOnly` (cap B so it doesn't slow down Buffergator)\n\n## [Tagbar](https://github.com/majutsushi/tagbar) ##\n\nTagbar is a vim plugin for browsing the tags of source code files.\n\n**Customizations**:\n\n* Binds `\u003cleader\u003et` to toggle Tagbar\n\n## [Powerline](https://github.com/Lokaltog/vim-powerline) ##\n\nPowerline is a utility plugin which allows you to create better-looking, more\nfunctional vim statuslines.\n\n_(I have some customizations for this, but let them out of the repo, as they're\nfairly machine specific)_\n\n## [vimux](https://github.com/benmills/vimux) ##\n\nEasily interact with tmux from vim. This project is still in development, so\nsome features are still missing.\n\n**Customizations**:\n\n* `\u003cleader\u003erb` - Run the current file with rspec\n* `\u003cleader\u003erp` - Prompt for a command to run\n* `\u003cleader\u003erl` - Run last command executed by RunVimTmuxCommand\n* `\u003cleader\u003eri` - Inspect runner pane\n* `\u003cleader\u003erx` - Close all other tmux panes in current window\n* `\u003cleader\u003ers` - Interrupt any command running in the runner pane\n\n## [Abolish](https://github.com/tpope/vim-abolish) ##\n\n_(I just copied the whole README -- it's too hard to explain)_\n\nThis is a plugin over 3 years in the making that I've deferred releasing, primarily\nbecause it's so gosh darn hard to explain.  It's three superficially unrelated\nplugins in one that share a common theme: working with variants of a word.\n\n### Abbreviation ###\n\nI know how to spell separate.  I know how to spell desperate.  My fingers, however, have trouble\ndistinguishing between the two, and I invariably have a 50 percent chance of typing\nseperate or desparate each time one of these comes up.  At first, I tried abbreviations:\n\n    iabbrev  seperate  separate\n    iabbrev desparate desperate\n\nBut this falls short at the beginning of a sentence.\n\n    iabbrev  Seperate  Separate\n    iabbrev Desparate Desperate\n\nTo be really thorough, we need uppercase too!\n\n    iabbrev  SEPERATE  SEPARATE\n    iabbrev DESPARATE DESPERATE\n\nOh, but consider the noun form, and the adverb form!\n\n    iabbrev  seperation  separation\n    iabbrev desparation desperation\n    iabbrev  seperately  separately\n    iabbrev desparately desperately\n    iabbrev  Seperation  separation\n    iabbrev Desparation Desperation\n    iabbrev  Seperately  Separately\n    iabbrev Desparately Desperately\n    iabbrev  SEPERATION  SEPARATION\n    iabbrev DESPARATION DESPERATION\n    iabbrev  SEPERATELY  SEPARATELY\n    iabbrev DESPARATELY DESPERATELY\n\nWait, there's also separates, separated, separating, separations, separator...\n\nAbolish.vim provides a simpler way.  The following one command produces 48 abbreviations\nincluding all of the above.\n\n    Abolish {despa,sepe}rat{e,es,ed,ing,ely,ion,ions,or}  {despe,sepa}rat{}\n\nMy current configuration has 25 Abolish commands that create hundreds of corrections\nmy fingers refuse to learn.\n\n### Substitution ###\n\nOne time I had an application that with a domain model called \"facilities\" that needed\nto be renamed to \"buildings\". So, a simple search and replace, right?\n\n    :%s/facility/building/g\n\nOh, but the case variants!\n\n    :%s/Facility/Building/g\n    :%s/FACILITY/BUILDING/g\n\nWait, the plural is more than \"s\" so we need to get that too!\n\n    :%s/facilities/buildings/g\n    :%s/Facilities/Buildings/g\n    :%s/FACILITIES/BUILDINGS/g\n\nAbolish.vim has your back.  One command to do all six, and you can repeat it with \u0026 too!\n\n    :%Subvert/facilit{y,ies}/building{,s}/g\n\nYou can abbreviate it as :S, and it accepts the full range of flags including\nthings like c (confirm).\n\nThere's also a variant for searching and a variant for grepping.\n\n### Coercion ###\n\nWant to turn fooBar into foo_bar?  Press crs (coerce to snake_case).\nMixedCase, camelCase, snake_case, and UPPER_CASE are all just 3 keystrokes\naway.  These commands support repeat.vim.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftedkulp%2Fvim-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftedkulp%2Fvim-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftedkulp%2Fvim-config/lists"}