Vim
Vim is a powerful text editor. Keystrokes can be chained together to combine actions, movements and selections into coolness. Folk using Vim 20 years still don't know it all. See also Emacs (and take care of your wrists (and posture)).
todo; rearrange commands into motion, action, etc.
Quick
- Cheatsheet for programmers - Part of the deep end!
- Shortcut layout - a sample of movement/selection, layed out in their direction
- Vim Quick Reference Card
- bullium.com Cheat Sheet
- http://www.worldtimzone.com/res/vi.html
- vim tips and trick
- https://cdn.shopify.com/s/files/1/0165/4168/files/preview.png [1]
- http://pastebin.com/AbksXVin
Guides
- tuxfiles.org Vim commands
- Learn Vim Progressively
- Seven habits of effective text editing
- Learn to speak vim – verbs, nouns, and modifiers!
- Vim anti-patterns [2]
- This is Your Brain on Vim - 15 Dec 2010
- Why Vim?
- Five Minute Vimscript
- Buffers, windows, and tabs
- http://blog.sanctum.geek.nz/advanced-vim-registers/
- http://www.openvim.com/
- http://stevelosh.com/blog/2010/09/coming-home-to-vim/
- http://haridas.in/vim-as-your-ide.html
- http://blog.peepcode.com/blog/2012/commanding-your-text-editor
- http://www.jackkinsella.ie/2011/09/05/textmate-to-vim.html
- http://therandymon.com/papers/vimforwriters.pdf
- http://alols.github.com/2012/11/07/writing-prose-with-vim/
Video
- Vimcasts.org by Drew Neil
- Tech Meetup Edinburgh Talk: Drew Neil on Vim
- 7 Habits For Effective Text Editing 2.0
- "A large percentage of time behind the computer screen is spent on editing text. Investing a little time in learning more efficient ways to use a text editor pays itself back fairly quickly. This presentation will give an overview of the large number of ways of using Vim in a smart way to edit programs, structured text and documentation. Examples will be used to make clear how learning a limited number of habits will avoid wasting time and lower the number of mistakes. Bram Moolenaar is mostly known for being the benevolent dictator of the text editor Vim."
Install
Some scripts require Vim 7.3, but some distros have older builds. You can build 7.3 locally though or use a provision system.
Had syntax issue errors. Rumtime path also should include distro base config..; http://www.linuxquestions.org/questions/linux-software-2/vim-syntax-highlight-fails-after-debian-upgrade-378073/
File operations
Command line
vim filename edit file (or create a buffer if file doesn't exist)
If you want to start vim with several files in a splitted window, just type;
vim -o a b c
for the horizontal split, and
vim -O a b c
for the vertical split.
In Vim
:e filename open filename in vim :w save :w filename save as :q quit if saved :x save if changed and quit, same as :wq ZZ save as above ZQ even if not saved (also :q!) :ex . - explore files in file directory. opens in split pans if file modified. :Sex - as above but forces split :Vex - as above but vertical split :Tex - as above but in new tab <enter> - open file o - open file in new split buffer
Ctrl-N autocomplete keyword forwards Ctrl-P autocomplete keyword backwards
NERD Tree
Moving around
zz - centre screen on cursor zt - move screen top to cursor zb - move screen bottom to cursor
Ctrl-e Moves screen up one line Ctrl-y Moves screen down one line Ctrl-u Moves screen up ½ page Ctrl-d Moves screen down ½ page Ctrl-b Moves screen up one page Ctrl-f Moves screen down one page [3]
0 - line beginning ^ - first non-whitespace character $ - line end
e - forward word E - forward WORD b - back word B - back WORD
{ - beginning of previous } - next paragraph ( - beginning of previous ) - next sentence % - current brace / - find text * - jump to next occurrence of word n - repeat forwards N - repeat backwards H - cursor to top of screen (high) M - cursor to middle of screen (middle) L - cursor to bottom of screen (low) Ctrl-D move cursor down half-page Ctrl-U move cursor up half-page gg - start of file G - end of file 123G - move to line 123 :123 - move to line 123 (easier imo) ma - mark cursor position 'a' 'a - move to mark position 'a'
Ctrl-O move back location Ctrl-I move forward location
gj move down a soft linebreak line
Operations
. repeat last change. doesn't work with plugin actions without script. u undo last change Ctrl-u undo whilst in insert mode U undo all changes to current line Ctrl-r redo i insert at cursor I insert at line beginning a append after the cursor A append at the end of the line o add ('open') line below and insert O add line above and insert x delete character under cursor X delete character before cursor y yank (copy) current text yy yank current line :%y+ yank all lines to clipboard [4] p paste yanked text after cursor/line P paste yanked text before cursor/line d - delete and yank (cut) df* - delete to (find) and including * dl - delete character (alias: "x") dd - delete current line including linebreak dw - delete to end of word from cursor d$ - delete to end of line from cursor diw - delete inner word diW - delete inner WORD daw - delete word, up to delimiter daW - delete WORD, including previous space dis - delete inner sentence das - delete a sentence dib - delete inner '(' ')' block dab - delete a '(' ')' block dip - delete inner paragraph dap - delete a paragraph diB - delete inner '{' '}' block daB - delete a '{' '}' block c - change (delete and insert) cc - delete current line including linebreak, insert cw - delete to end of word from cursor, insert c$ - delete to end of line from cursor, insert ciw - delete inner word, insert ci" - change inner quoted string ci( - change inner brackets ci[ - change inner contents of [].. ci], ci) for insert on closing bracket caw - change an object caW - change an object, including space etc. v - visual select text viw - visual inner word viw~ - visual inner word, toggle case vip - visual inner paragraph vec - visual, end of word, change highlighted V - visual select lines Ctrl-v - visual select a block s - change one character and insert Ctrl-Y - copy character from line above Ctrl-E - copy character from line below Ctrl-N - auto-completion next match Ctrl-P - auto-completion previous match > - indent right < - indent left
V= - visual select lines, then reformat with = = - fix indentation for selection == - fix indentation for one line
:s/foo/bar/ - search and replace first occurrence :s/foo/bar/s - search and replace, global current line :%s/foo/bar/g - search and replace, global whole file :%s/foo/bar/gc - search and replace, with confirm :g/text string/d - delete all lines with text string :!g/text string/d - delete all lines without text string [5] :g!/^\s*#/d - delete all lines without a # qa - start recording macro 'a', q - stop recording qA - start appending to macro 'a' @a - play macro a @@ - execute again 3@a - play macro 3 thrice :let @a='macrogoeshere' - write macro manually Ctrl-R Ctrl-R a - insert mode :let @a='Ctrl-R Ctrl-R a - edit existing macro
Buffers
:b [buffer number of any part of name] switch to buffer
set wildchar=<Tab> wildmenu wildmode=full with this, :b [tab] gives a menu
Windows
Windows are like tmux panes, awesome clients. Windows can hold file buffers or things like Nerdtree. Tabs are a set of windows.
:sp [filename] open file in new window
Ctrl-W w move forward window Ctrl-W W move backwards window
Ctrl-W then h, j, k, l select window left, below, above, right
Ctrl-W h swap buffer in active window with the window below Ctrl-W k as above, to above Ctrl-W h as above, to left Ctrl-W l as above, to right
Ctrl-W x switch windows around
Ctrl-W _ maximize window horizontally Ctrl-W | maximize window vertically
:qall quit all buffer windows on current tab
dwm.vim
map <silent> <C-J> <C-W>w map <silent> <C-K> <C-W>W map <silent> <C-,> :call DWM_Rotate(0)<CR> map <silent> <C-.> :call DWM_Rotate(1)<CR> map <silent> <C-N> :call DWM_New()<CR> map <silent> <C-C> :call DWM_Close()<CR> map <silent> <C-Space> :call DWM_Focus()<CR> map <silent> <C-@> :call DWM_Focus()<CR> map <silent> <C-H> :call DWM_GrowMaster()<CR> map <silent> <C-L> :call DWM_ShrinkMaster()<CR>
Tabs
:tabs list tabs
gt go to next tab gT go to previous tab {i}gt go to tab in position i
:tab drop {file} open {file} in a new tab, or jump to a window/tab containing the file if there is one :tab split copy the current window to a new tab of its own :tabm [n] move tab to nth position :tabm move tab to last :tab ball split all buffers into tabs :tab help open a new help window in its own tab page
:bufdo qall send qall command to all tabs :wqall! :xall! to check
- TabBar - derived from miniBufExplorer [7]
- http://www.vim.org/scripts/script.php?script_id=2050
Client/server
- http://vim.wikia.com/wiki/Enable_servername_capability_in_vim/xterm
- http://www.rohanjain.in/yet-another-vim-productivity-post-server-client/
- http://ajayfromiiit.wordpress.com/2009/10/21/server-and-client-mode-in-vim/
Sessions
- session.vim improves upon Vim's built-in :mksession command by enabling you to easily and (if you want) automatically persist and restore your Vim editing sessions. It works by generating a Vim script that restores your current settings and the arrangement of tab pages and/or split windows and the files they contain.
Undo
Ctrl-g create new undo point
Git
:Gwrite - git add file :Gread - git checkout (revert) open to staged version :Gremove - git rm and close buffer :Gmove - git mv file. with /, relative to git root; without, relative to file :Gcommit - git commit, opens message buffer :Gblame - open split window with git blame details :Gbrowse - open Github, else git instaweb for local sevrer
vim#diff resolution:
:diffget [buffer] - get diff from another buffer :diffput [buffer] - put diff into another buffer :diffupdate - update diff colouring dg - get from other buffer pane (only 2 pane) dp - put to other buffer pane (works in 3 pane) [c - jump to previous changeset ]c - jump to next changeset :only - close buffers other than active
Syntax
HTML
CSS
- https://github.com/ap/vim-css-color - underlays the hexadecimal CSS colorcodes with their real color. The foreground color is selected appositely. So #FF0000 will look as hot as a fire engine! + Highlighting multiple colors on the same line (not sure if anyone uses it though), rgb and rgba color notation for all those fancy CSS3 niceties
to recheck;
- https://github.com/ChrisYip/Better-CSS-Syntax-for-Vim - has vendor prefixes. breaks with scss [8] :/
- https://github.com/hail2u/vim-css3-syntax - recent
- http://www.vim.org/scripts/script.php?script_id=3042
- https://github.com/cakebaker/scss-syntax.vim
- (https://github.com/tpope/vim-haml)
- https://github.com/xolox/vim-lua-inspect
- http://drupal.org/node/1303122 - drupal .info/make/build
to resort
- Syntastic is a syntax checking plugin that runs files through external syntax checkers and displays any resulting errors to the user. This can be done on demand, or automatically as files are saved. If syntax errors are detected, the user is notified and is happy because they didn't have to compile their code or execute their script to find them. At the time of this writing, syntax checking plugins exist for applescript, c, coffee, cpp, css, cucumber, cuda, docbk, erlang, eruby, fortran, gentoo_metadata, go, haml, haskell, html, javascript, json, less, lua, matlab, perl, php, puppet, python, rst, ruby, sass/scss, sh, tcl, tex, vala, xhtml, xml, xslt, yaml, zpt
- https://github.com/ChrisYip/Better-CSS-Syntax-for-Vim - has vendor prefixes. breaks with scss [9] :/
- https://github.com/hail2u/vim-css3-syntax - recent
- http://www.vim.org/scripts/script.php?script_id=3042
- http://drupal.org/node/1303122 - drupal .info/make/build
Folds
Folds are sections of text reduced to one line (based on brackets, indentation, etc.). Folding is on by default. I have the foldlevel dialed up to 20 to avoid them.
zo - open fold zO - open fold recursively zc - close fold zC - close fold resursive zR - open all folds zM - close all zj - go down and up a fold zk - go up a fold
Arrow keys
Config
- http://vim.wikia.com/wiki/Understanding_VIMRUNTIME
- http://vim.wikia.com/wiki/Set_VIMRUNTIME_within_vimrc
I chose /usr/share/config/vim
/usr/local/share/vim is a default $VIMRUNTIME though
Handy
:e scp://root@example.com/~user/folder/.config - open remote file $ vim scp://root@example.com/~user/folder/.config :reg - list register contents K - in normal mode, run man for current word (opens "man word" in shell)
- http://yoursachet.com/ - create config
- stackoverflow: How to paste text into Vim command line
- http://mit.edu/~georgiou/www/vi/ - interesting at least
Vimscripts
- Vimpusher - Vim setup sharing
Management
- https://github.com/tpope/vim-pathogen - vimscript management
- https://github.com/gmarik/vundle/ - like pathogen but can install/update
- https://github.com/Shougo/neobundle.vim - install straight from github, git, vimscripts.org, other http.
Finding things
- buffergrep : Grep buffers, not files
- compview : Creates an interactive search window
Git
- https://github.com/tpope/vim-fugitive - bestest gitwrapper
GitHub
Tools
- http://val.markovic.io/blog/youcompleteme-a-fast-as-you-type-fuzzy-search-code-completion-engine-for-vim - no keyboard shortcuts had to be pressed to get the list of completion candidates, plus subsequence match [11]
Cursors
Relative line numbers
- http://myusuf3.github.com/numbers.vim - requires vim 7.3, not in debian squeeze backports and some shared hosting. compile latest instead..
Services
To sort
- cmdalias.vim - Create aliases for Vim commands. [13]
to check;
- https://github.com/tomtom/tcomment_vim - comment add/remove
gc{motion} toggle comments (for small comments) gcc toggle comment for the current line gC{motion} comment region gCc comment the current line
- http://reluctanthacker.rollett.org/software/drupavim - post content using blog api
- http://vim.sourceforge.net/scripts/script.php?script_id=2174 - repeat movement with value
- https://github.com/mattn/zencoding-vim
- https://github.com/Lokaltog/vim-easymotion
- https://github.com/Shougo/neocomplcache
- https://github.com/jceb/vim-orgmode
- https://github.com/sickill/vim-pasta - Pasting in Vim with indentation adjusted to destination context.
- https://github.com/ervandew/supertab
- https://github.com/msanders/snipmate.vim
- https://wincent.com/products/command-t [14]
- http://www.vim.org/scripts/script.php?script_id=1075
- http://mattn.github.com/zencoding-vim/
- http://www.vim.org/scripts/script.php?script_id=1984
- https://github.com/benmills/vimux
- https://github.com/gregsexton/gitv
- https://github.com/laktek/distraction-free-writing-vim - minimal setup for markdown editing.
- http://sjl.bitbucket.org/gundo.vim/ - graph undo trees
- http://www.vim.org/scripts/script.php?script_id=273 - taglist
- https://github.com/yazug/vim-taglist-plus - best fork of the fork
- https://github.com/coderifous/textobj-word-column.vim
- https://github.com/paradigm/TextObjectify
- https://github.com/robmiller/vim-movar
- https://github.com/bkad/CamelCaseMotion
System
- Conque is a Vim plugin which allows you to run interactive programs, such as bash on linux or powershell.exe on Windows, inside a Vim buffer. In other words it is a terminal emulator which uses a Vim buffer to display the program output.
Colour themes
- http://www.bilalquadri.com/villustrator/ - create themes
Mouse?
- http://vim.wikia.com/wiki/Using_the_mouse_for_Vim_in_an_xterm
- http://superuser.com/questions/75141/mouse-wheel-scrolling-in-less-and-vim-using-urxvt
- http://tech.groups.yahoo.com/group/vimdev/message/63032
Tmux integration
Javascript
hmm.
- http://gpl.internetconnection.net/vi/
- http://www.migniot.com/jsvim/
- http://codemirror.net/demo/vim.html
Packages and support
Vim everywhere
Textaid
Chrome extension. As Chrome can't spawn child processes, text is passed to a local server which launches Vim.
It's All Text
Firefox extension. Only does textarea, no WYSIWYG support. Doesn't launch Vim correctly be default if FF not launched from terminal.