-
Notifications
You must be signed in to change notification settings - Fork 0
/
vimtips.json
1 lines (1 loc) · 79.3 KB
/
vimtips.json
1
[{"line": ""}, {"line": "__BEGIN__"}, {"line": "*vimtips.txt*\tFor Vim version 7.3. "}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" new items marked [N] , corrected items marked [C]"}, {"line": "\" *best-searching*"}, {"line": "/joe/e : cursor set to End of match"}, {"line": "3/joe/e+1 : find 3rd joe cursor set to End of match plus 1 [C]"}, {"line": "/joe/s-2 : cursor set to Start of match minus 2"}, {"line": "/joe/+3 : find joe move cursor 3 lines down"}, {"line": "/^joe.*fred.*bill/ : find joe AND fred AND Bill (Joe at start of line)"}, {"line": "/^[A-J]/ : search for lines beginning with one or more A-J"}, {"line": "/begin\\_.*end : search over possible multiple lines"}, {"line": "/fred\\_s*joe/ : any whitespace including newline [C]"}, {"line": "/fred\\|joe : Search for FRED OR JOE"}, {"line": "/.*fred\\&.*joe : Search for FRED AND JOE in any ORDER!"}, {"line": "/\\<fred\\>/ : search for fred but not alfred or frederick [C]"}, {"line": "/\\<\\d\\d\\d\\d\\> : Search for exactly 4 digit numbers"}, {"line": "/\\D\\d\\d\\d\\d\\D : Search for exactly 4 digit numbers"}, {"line": "/\\<\\d\\{4}\\> : same thing"}, {"line": "/\\([^0-9]\\|^\\)%.*% : Search for absence of a digit or beginning of line"}, {"line": "\" finding empty lines"}, {"line": "/^\\n\\{3} : find 3 empty lines"}, {"line": "/^str.*\\nstr : find 2 successive lines starting with str"}, {"line": "/\\(^str.*\\n\\)\\{2} : find 2 successive lines starting with str"}, {"line": "\" using rexexp memory in a search find fred.*joe.*joe.*fred *C*"}, {"line": "/\\(fred\\).*\\(joe\\).*\\2.*\\1"}, {"line": "\" Repeating the Regexp (rather than what the Regexp finds)"}, {"line": "/^\\([^,]*,\\)\\{8}"}, {"line": "\" visual searching"}, {"line": ":vmap // y/<C-R>\"<CR> : search for visually highlighted text"}, {"line": ":vmap <silent> // y/<C-R>=escape(@\", '\\\\/.*$^~[]')<CR><CR> : with spec chars"}, {"line": "\" \\zs and \\ze regex delimiters :h /\\zs"}, {"line": "/<\\zs[^>]*\\ze> : search for tag contents, ignoring chevrons"}, {"line": "\" zero-width :h /\\@="}, {"line": "/<\\@<=[^>]*>\\@= : search for tag contents, ignoring chevrons"}, {"line": "/<\\@<=\\_[^>]*>\\@= : search for tags across possible multiple lines"}, {"line": "\" searching over multiple lines \\_ means including newline"}, {"line": "/<!--\\_p\\{-}--> : search for multiple line comments"}, {"line": "/fred\\_s*joe/ : any whitespace including newline *C*"}, {"line": "/bugs\\(\\_.\\)*bunny : bugs followed by bunny anywhere in file"}, {"line": ":h \\_ : help"}, {"line": "\" search for declaration of subroutine/function under cursor"}, {"line": ":nmap gx yiw/^\\(sub\\<bar>function\\)\\s\\+<C-R>\"<CR>"}, {"line": "\" multiple file search"}, {"line": ":bufdo /searchstr/ : use :rewind to recommence search"}, {"line": "\" multiple file search better but cheating"}, {"line": ":bufdo %s/searchstr/&/gic : say n and then a to stop"}, {"line": "\" How to search for a URL without backslashing"}, {"line": "?http://www.vim.org/ : (first) search BACKWARDS!!! clever huh!"}, {"line": "\" Specify what you are NOT searching for (vowels)"}, {"line": "/\\c\\v([^aeiou]&\\a){4} : search for 4 consecutive consonants"}, {"line": "/\\%>20l\\%<30lgoat : Search for goat between lines 20 and 30 [N]"}, {"line": "/^.\\{-}home.\\{-}\\zshome/e : match only the 2nd occurence in a line of \"home\" [N]"}, {"line": ":%s/home.\\{-}\\zshome/alone : Substitute only the occurrence of home in any line [N]"}, {"line": "\" find str but not on lines containing tongue"}, {"line": "^\\(.*tongue.*\\)\\@!.*nose.*$"}, {"line": "\\v^((tongue)@!.)*nose((tongue)@!.)*$"}, {"line": ".*nose.*\\&^\\%(\\%(tongue\\)\\@!.\\)*$ "}, {"line": ":v/tongue/s/nose/&/gic"}, {"line": "'a,'bs/extrascost//gc : trick: restrict search to between markers (answer n) [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" *best-substitution*"}, {"line": ":%s/fred/joe/igc : general substitute command"}, {"line": ":%s//joe/igc : Substitute what you last searched for [N]"}, {"line": ":%s/~/sue/igc : Substitute your last replacement string [N]"}, {"line": ":%s/\\r//g : Delete DOS returns ^M"}, {"line": "\" Is your Text File jumbled onto one line? use following"}, {"line": ":%s/\\r/\\r/g : Turn DOS returns ^M into real returns"}, {"line": ":%s= *$== : delete end of line blanks"}, {"line": ":%s= \\+$== : Same thing"}, {"line": ":%s#\\s*\\r\\?$## : Clean both trailing spaces AND DOS returns"}, {"line": ":%s#\\s*\\r*$## : same thing"}, {"line": "\" deleting empty lines"}, {"line": ":%s/^\\n\\{3}// : delete blocks of 3 empty lines"}, {"line": ":%s/^\\n\\+/\\r/ : compressing empty lines"}, {"line": ":%s#<[^>]\\+>##g : delete html tags, leave text (non-greedy)"}, {"line": ":%s#<\\_.\\{-1,}>##g : delete html tags possibly multi-line (non-greedy)"}, {"line": ":%s#.*\\(\\d\\+hours\\).*#\\1# : Delete all but memorised string (\\1) [N]"}, {"line": "\" parse xml/soap "}, {"line": "%s#><\\([^/]\\)#>\\r<\\1#g : split jumbled up XML file into one tag per line [N]"}, {"line": "%s/</\\r&/g : simple split of html/xml/soap [N]"}, {"line": ":%s#<[^/]#\\rgic : simple split of html/xml/soap but not closing tag [N]"}, {"line": ":%s#<[^/]#\\rgi : parse on open xml tag [N]"}, {"line": ":%s#\\[\\d\\+\\]#\\rg : parse on numbered array elements [1] [N]"}, {"line": "\" VIM Power Substitute"}, {"line": ":'a,'bg/fred/s/dick/joe/igc : VERY USEFUL"}, {"line": "\" duplicating columns"}, {"line": ":%s= [^ ]\\+$=&&= : duplicate end column"}, {"line": ":%s= \\f\\+$=&&= : Dupicate filename"}, {"line": ":%s= \\S\\+$=&& : usually the same"}, {"line": "\" memory"}, {"line": ":%s#example#& = gic : duplicate entire matched string [N]"}, {"line": ":%s#.*\\(tbl_\\w\\+\\).*#\\1# : extract list of all strings tbl_* from text [NC]"}, {"line": ":s/\\(.*\\):\\(.*\\)/\\2 : \\1/ : reverse fields separated by :"}, {"line": ":%s/^\\(.*\\)\\n\\1$/\\1/ : delete duplicate lines"}, {"line": ":%s/^\\(.*\\)\\(\\n\\1\\)\\+$/\\1/ : delete multiple duplicate lines [N]"}, {"line": "\" non-greedy matching \\{-}"}, {"line": ":%s/^.\\{-}pdf/new.pdf/ : delete to 1st occurence of pdf only (non-greedy)"}, {"line": "%s#^.\\{-}\\([0-9]\\{3,4\\}serial\\)#\\1#gic : delete up to 123serial or 1234serial [N]"}, {"line": "\" use of optional atom \\?"}, {"line": ":%s#\\<[zy]\\?tbl_[a-z_]\\+\\>#\\Lgc : lowercase with optional leading characters"}, {"line": "\" over possibly many lines"}, {"line": ":%s/<!--\\_.\\{-}-->// : delete possibly multi-line comments"}, {"line": ":help /\\{-} : help non-greedy"}, {"line": "\" substitute using a register"}, {"line": ":s/fred/<c-r>a/g : sub \"fred\" with contents of register \"a\""}, {"line": ":s/fred/<c-r>asome_text<c-r>s/g "}, {"line": ":s/fred/\\=@a/g : better alternative as register not displayed (not *) [C]"}, {"line": "\" multiple commands on one line"}, {"line": ":%s/\\f\\+\\.gif\\>/\\r&\\r/g | v/\\.gif$/d | %s/gif/jpg/"}, {"line": ":%s/a/but/gie|:update|:next : then use @: to repeat"}, {"line": "\" ORing"}, {"line": ":%s/goat\\|cow/sheep/gc : ORing (must break pipe)"}, {"line": ":'a,'bs#\\[\\|\\]##g : remove [] from lines between markers a and b [N]"}, {"line": ":%s/\\v(.*\\n){5}/&\\r : insert a blank line every 5 lines [N]"}, {"line": "\" Calling a VIM function"}, {"line": ":s/__date__/\\=strftime(\"%c\")/ : insert datestring"}, {"line": ":inoremap \\zd <C-R>=strftime(\"%d%b%y\")<CR> : insert date eg 31Jan11 [N]"}, {"line": "\" Working with Columns sub any str1 in col3"}, {"line": ":%s:\\(\\(\\w\\+\\s\\+\\)\\{2}\\)str1:\\1str2:"}, {"line": "\" Swapping first & last column (4 columns)"}, {"line": ":%s:\\(\\w\\+\\)\\(.*\\s\\+\\)\\(\\w\\+\\)$:\\3\\2\\1:"}, {"line": "\" format a mysql query "}, {"line": ":%s#\\<from\\>\\|\\<where\\>\\|\\<left join\\>\\|\\<\\inner join\\>#\\rg"}, {"line": "\" filter all form elements into paste register"}, {"line": ":redir @*|sil exec 'g#<\\(input\\|select\\|textarea\\|/\\=form\\)\\>#p'|redir END"}, {"line": ":nmap ,z :redir @*<Bar>sil exec 'g@<\\(input\\<Bar>select\\<Bar>textarea\\<Bar>/\\=form\\)\\>@p'<Bar>redir END<CR>"}, {"line": "\" substitute string in column 30 [N]"}, {"line": ":%s/^\\(.\\{30\\}\\)xx/\\1yy/"}, {"line": "\" decrement numbers by 3"}, {"line": ":%s/\\d\\+/\\=(submatch(0)-3)/"}, {"line": "\" increment numbers by 6 on certain lines only"}, {"line": ":g/loc\\|function/s/\\d/\\=submatch(0)+6/"}, {"line": "\" better"}, {"line": ":%s#txtdev\\zs\\d#\\=submatch(0)+1#g"}, {"line": ":h /\\zs"}, {"line": "\" increment only numbers gg\\d\\d by 6 (another way)"}, {"line": ":%s/\\(gg\\)\\@<=\\d\\+/\\=submatch(0)+6/"}, {"line": ":h zero-width"}, {"line": "\" rename a string with an incrementing number"}, {"line": ":let i=10 | 'a,'bg/Abc/s/yy/\\=i/ |let i=i+1 # convert yy to 10,11,12 etc"}, {"line": "\" as above but more precise"}, {"line": ":let i=10 | 'a,'bg/Abc/s/xx\\zsyy\\ze/\\=i/ |let i=i+1 # convert xxyy to xx11,xx12,xx13"}, {"line": "\" find replacement text, put in memory, then use \\zs to simplify substitute"}, {"line": ":%s/\"\\([^.]\\+\\).*\\zsxx/\\1/"}, {"line": "\" Pull word under cursor into LHS of a substitute"}, {"line": ":nmap <leader>z :%s#\\<<c-r>=expand(\"<cword>\")<cr>\\>#"}, {"line": "\" Pull Visually Highlighted text into LHS of a substitute"}, {"line": ":vmap <leader>z :<C-U>%s/\\<<c-r>*\\>/"}, {"line": "\" substitute singular or plural"}, {"line": ":'a,'bs/bucket\\(s\\)*/bowl\\1/gic [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" all following performing similar task, substitute within substitution"}, {"line": "\" Multiple single character substitution in a portion of line only"}, {"line": ":%s,\\(all/.*\\)\\@<=/,_,g : replace all / with _ AFTER \"all/\""}, {"line": "\" Same thing"}, {"line": ":s#all/\\zs.*#\\=substitute(submatch(0), '/', '_', 'g')#"}, {"line": "\" Substitute by splitting line, then re-joining"}, {"line": ":s#all/#&^M#|s#/#_#g|-j!"}, {"line": "\" Substitute inside substitute"}, {"line": ":%s/.*/\\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" *best-global* command "}, {"line": ":g/gladiolli/# : display with line numbers (YOU WANT THIS!)"}, {"line": ":g/fred.*joe.*dick/ : display all lines fred,joe & dick"}, {"line": ":g/\\<fred\\>/ : display all lines fred but not freddy"}, {"line": ":g/^\\s*$/d : delete all blank lines"}, {"line": ":g!/^dd/d : delete lines not containing string"}, {"line": ":v/^dd/d : delete lines not containing string"}, {"line": ":g/joe/,/fred/d : not line based (very powerfull)"}, {"line": ":g/fred/,/joe/j : Join Lines [N]"}, {"line": ":g/-------/.-10,.d : Delete string & 10 previous lines"}, {"line": ":g/{/ ,/}/- s/\\n\\+/\\r/g : Delete empty lines but only between {...}"}, {"line": ":v/\\S/d : Delete empty lines (and blank lines ie whitespace)"}, {"line": ":v/./,/./-j : compress empty lines"}, {"line": ":g/^$/,/./-j : compress empty lines"}, {"line": ":g/<input\\|<form/p : ORing"}, {"line": ":g/^/put_ : double space file (pu = put)"}, {"line": ":g/^/m0 : Reverse file (m = move)"}, {"line": ":g/^/m$ : No effect! [N]"}, {"line": ":'a,'bg/^/m'b : Reverse a section a to b"}, {"line": ":g/^/t. : duplicate every line"}, {"line": ":g/fred/t$ : copy (transfer) lines matching fred to EOF"}, {"line": ":g/stage/t'a : copy (transfer) lines matching stage to marker a (cannot use .) [C]"}, {"line": ":g/^Chapter/t.|s/./-/g : Automatically underline selecting headings [N]"}, {"line": ":g/\\(^I[^^I]*\\)\\{80}/d : delete all lines containing at least 80 tabs"}, {"line": "\" perform a substitute on every other line"}, {"line": ":g/^/ if line('.')%2|s/^/zz / "}, {"line": "\" match all lines containing \"somestr\" between markers a & b"}, {"line": "\" copy after line containing \"otherstr\""}, {"line": ":'a,'bg/somestr/co/otherstr/ : co(py) or mo(ve)"}, {"line": "\" as above but also do a substitution"}, {"line": ":'a,'bg/str1/s/str1/&&&/|mo/str2/"}, {"line": ":%norm jdd : delete every other line"}, {"line": "\" incrementing numbers (type <c-a> as 5 characters)"}, {"line": ":.,$g/^\\d/exe \"norm! \\<c-a>\": increment numbers"}, {"line": ":'a,'bg/\\d\\+/norm! ^A : increment numbers"}, {"line": "\" storing glob results (note must use APPEND) you need to empty reg a first with qaq. "}, {"line": "\"save results to a register/paste buffer"}, {"line": ":g/fred/y A : append all lines fred to register a"}, {"line": ":g/fred/y A | :let @*=@a : put into paste buffer"}, {"line": ":let @a=''|g/Barratt/y A |:let @*=@a"}, {"line": "\" filter lines to a file (file must already exist)"}, {"line": ":'a,'bg/^Error/ . w >> errors.txt"}, {"line": "\" duplicate every line in a file wrap a print '' around each duplicate"}, {"line": ":g/./yank|put|-1s/'/\"/g|s/.*/Print '&'/"}, {"line": "\" replace string with contents of a file, -d deletes the \"mark\""}, {"line": ":g/^MARK$/r tmp.txt | -d"}, {"line": "\" display prettily"}, {"line": ":g/<pattern>/z#.5 : display with context"}, {"line": ":g/<pattern>/z#.5|echo \"==========\" : display beautifully"}, {"line": "\" Combining g// with normal mode commands"}, {"line": ":g/|/norm 2f|r* : replace 2nd | with a star"}, {"line": "\"send output of previous global command to a new window"}, {"line": ":nmap <F3> :redir @a<CR>:g//<CR>:redir END<CR>:new<CR>:put! a<CR><CR>"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" *Best-Global-combined-with-substitute* (*power-editing*)"}, {"line": ":'a,'bg/fred/s/joe/susan/gic : can use memory to extend matching"}, {"line": ":/fred/,/joe/s/fred/joe/gic : non-line based (ultra)"}, {"line": ":/biz/,/any/g/article/s/wheel/bucket/gic: non-line based [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Find fred before beginning search for joe"}, {"line": ":/fred/;/joe/-2,/sid/+3s/sally/alley/gIC"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" create a new file for each line of file eg 1.txt,2.txt,3,txt etc"}, {"line": ":g/^/exe \".w \".line(\".\").\".txt\""}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" chain an external command"}, {"line": ":.g/^/ exe \".!sed 's/N/X/'\" | s/I/Q/ [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Operate until string found [N]"}, {"line": "d/fred/ :delete until fred"}, {"line": "y/fred/ :yank until fred"}, {"line": "c/fred/e :change until fred end"}, {"line": "v12| : visualise/change/delete to column 12 [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Summary of editing repeats [N]"}, {"line": ". last edit (magic dot)"}, {"line": ":& last substitute"}, {"line": ":%& last substitute every line"}, {"line": ":%&gic last substitute every line confirm"}, {"line": "g% normal mode repeat last substitute"}, {"line": "g& last substitute on all lines"}, {"line": "@@ last recording"}, {"line": "@: last command-mode command"}, {"line": ":!! last :! command"}, {"line": ":~ last substitute"}, {"line": ":help repeating"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Summary of repeated searches"}, {"line": "; last f, t, F or T"}, {"line": ", last f, t, F or T in opposite direction"}, {"line": "n last / or ? search"}, {"line": "N last / or ? search in opposite direction"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" *Absolutely-essential*"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "* # g* g# : find word under cursor (<cword>) (forwards/backwards)"}, {"line": "% : match brackets {}[]()"}, {"line": ". : repeat last modification "}, {"line": "@: : repeat last : command (then @@)"}, {"line": "matchit.vim : % now matches tags <tr><td><script> <?php etc"}, {"line": "<C-N><C-P> : word completion in insert mode"}, {"line": "<C-X><C-L> : Line complete SUPER USEFUL"}, {"line": "/<C-R><C-W> : Pull <cword> onto search/command line"}, {"line": "/<C-R><C-A> : Pull <CWORD> onto search/command line"}, {"line": ":set ignorecase : you nearly always want this"}, {"line": ":set smartcase : overrides ignorecase if uppercase used in search string (cool)"}, {"line": ":syntax on : colour syntax in Perl,HTML,PHP etc"}, {"line": ":set syntax=perl : force syntax (usually taken from file extension)"}, {"line": ":h regexp<C-D> : type control-D and get a list all help topics containing"}, {"line": " regexp (plus use TAB to Step thru list)"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" MAKE IT EASY TO UPDATE/RELOAD _vimrc"}, {"line": ":nmap ,s :source $VIM/_vimrc"}, {"line": ":nmap ,v :e $VIM/_vimrc"}, {"line": ":e $MYVIMRC : edits your _vimrc whereever it might be [N]"}, {"line": "\" How to have a variant in your .vimrc for different PCs [N]"}, {"line": "if $COMPUTERNAME == \"NEWPC\""}, {"line": "ab mypc vista"}, {"line": "else"}, {"line": "ab mypc dell25"}, {"line": "endif"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" splitting windows"}, {"line": ":vsplit other.php # vertically split current file with other.php [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\"VISUAL MODE (easy to add other HTML Tags)"}, {"line": ":vmap sb \"zdi<b><C-R>z</b><ESC> : wrap <b></b> around VISUALLY selected Text"}, {"line": ":vmap st \"zdi<?= <C-R>z ?><ESC> : wrap <?= ?> around VISUALLY selected Text"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\"vim 7 tabs"}, {"line": "vim -p fred.php joe.php : open files in tabs"}, {"line": ":tabe fred.php : open fred.php in a new tab"}, {"line": ":tab ball : tab open files"}, {"line": ":close : close a tab but leave the buffer *N*"}, {"line": "\" vim 7 forcing use of tabs from .vimrc"}, {"line": ":nnoremap gf <C-W>gf"}, {"line": ":cab e tabe"}, {"line": ":tab sball : retab all files in buffer (repair) [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Exploring"}, {"line": ":e . : file explorer"}, {"line": ":Exp(lore) : file explorer note capital Ex"}, {"line": ":Sex(plore) : file explorer in split window"}, {"line": ":browse e : windows style browser"}, {"line": ":ls : list of buffers"}, {"line": ":cd .. : move to parent directory"}, {"line": ":args : list of files"}, {"line": ":pwd : Print Working Directory (current directory) [N]"}, {"line": ":args *.php : open list of files (you need this!)"}, {"line": ":lcd %:p:h : change to directory of current file"}, {"line": ":autocmd BufEnter * lcd %:p:h : change to directory of current file automatically (put in _vimrc)"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Changing Case"}, {"line": "guu : lowercase line"}, {"line": "gUU : uppercase line"}, {"line": "Vu : lowercase line"}, {"line": "VU : uppercase line"}, {"line": "g~~ : flip case line"}, {"line": "vEU : Upper Case Word"}, {"line": "vE~ : Flip Case Word"}, {"line": "ggguG : lowercase entire file"}, {"line": "\" Titlise Visually Selected Text (map for .vimrc)"}, {"line": "vmap ,c :s/\\<\\(.\\)\\(\\k*\\)\\>/\\u\\1\\L\\2/g<CR>"}, {"line": "\" Title Case A Line Or Selection (better)"}, {"line": "vnoremap <F6> :s/\\%V\\<\\(\\w\\)\\(\\w*\\)\\>/\\u\\1\\L\\2/ge<cr> [N]"}, {"line": "\" titlise a line"}, {"line": "nmap ,t :s/.*/\\L&/<bar>:s/\\<./\\u&/g<cr> [N]"}, {"line": "\" Uppercase first letter of sentences"}, {"line": ":%s/[.!?]\\_s\\+\\a/\\U&\\E/g"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "gf : open file name under cursor (SUPER)"}, {"line": ":nnoremap gF :view <cfile><cr> : open file under cursor, create if necessary"}, {"line": "ga : display hex,ascii value of char under cursor"}, {"line": "ggVGg? : rot13 whole file"}, {"line": "ggg?G : rot13 whole file (quicker for large file)"}, {"line": ":8 | normal VGg? : rot13 from line 8"}, {"line": ":normal 10GVGg? : rot13 from line 8"}, {"line": "<C-A>,<C-X> : increment,decrement number under cursor"}, {"line": " win32 users must remap CNTRL-A"}, {"line": "<C-R>=5*5 : insert 25 into text (mini-calculator)"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Make all other tips superfluous"}, {"line": ":h 42 : also http://www.google.com/search?q=42"}, {"line": ":h holy-grail"}, {"line": ":h!"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" disguise text (watch out) [N]"}, {"line": "ggVGg? : rot13 whole file (toggles)"}, {"line": ":set rl! : reverse lines right to left (toggles)"}, {"line": ":g/^/m0 : reverse lines top to bottom (toggles)"}, {"line": ":%s/\\(\\<.\\{-}\\>\\)/\\=join(reverse(split(submatch(1), '.\\zs')), '')/g : reverse all text *N*"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" History, Markers & moving about (what Vim Remembers) [C]"}, {"line": "'. : jump to last modification line (SUPER)"}, {"line": "`. : jump to exact spot in last modification line"}, {"line": "g; : cycle thru recent changes (oldest first)"}, {"line": "g, : reverse direction "}, {"line": ":changes"}, {"line": ":h changelist : help for above"}, {"line": "<C-O> : retrace your movements in file (starting from most recent)"}, {"line": "<C-I> : retrace your movements in file (reverse direction)"}, {"line": ":ju(mps) : list of your movements"}, {"line": ":help jump-motions"}, {"line": ":history : list of all your commands"}, {"line": ":his c : commandline history"}, {"line": ":his s : search history"}, {"line": "q/ : Search history Window (puts you in full edit mode) (exit CTRL-C)"}, {"line": "q: : commandline history Window (puts you in full edit mode) (exit CTRL-C)"}, {"line": ":<C-F> : history Window (exit CTRL-C)"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Abbreviations & Maps"}, {"line": "\" Maps are commands put onto keys, abbreviations expand typed text [N]"}, {"line": "\" Following 4 maps enable text transfer between VIM sessions"}, {"line": ":map <f7> :'a,'bw! c:/aaa/x : save text to file x"}, {"line": ":map <f8> :r c:/aaa/x : retrieve text "}, {"line": ":map <f11> :.w! c:/aaa/xr<CR> : store current line"}, {"line": ":map <f12> :r c:/aaa/xr<CR> : retrieve current line"}, {"line": ":ab php : list of abbreviations beginning php"}, {"line": ":map , : list of maps beginning ,"}, {"line": "\" allow use of F10 for mapping (win32)"}, {"line": "set wak=no : :h winaltkeys"}, {"line": "\" For use in Maps"}, {"line": "<CR> : carriage Return for maps"}, {"line": "<ESC> : Escape"}, {"line": "<LEADER> : normally \\"}, {"line": "<BAR> : | pipe"}, {"line": "<BACKSPACE> : backspace"}, {"line": "<SILENT> : No hanging shell window"}, {"line": "\"display RGB colour under the cursor eg #445588"}, {"line": ":nmap <leader>c :hi Normal guibg=#<c-r>=expand(\"<cword>\")<cr><cr>"}, {"line": "map <f2> /price only\\\\|versus/ :in a map need to backslash the \\"}, {"line": "\" type table,,, to get <table></table> ### Cool ###"}, {"line": "imap ,,, <esc>bdwa<<esc>pa><cr></<esc>pa><esc>kA"}, {"line": "\" list current mappings of all your function keys"}, {"line": ":for i in range(1, 12) | execute(\"map <F\".i.\">\") | endfor [N]"}, {"line": "\" for your .vimrc"}, {"line": ":cab ,f :for i in range(1, 12) \\| execute(\"map <F\".i.\">\") \\| endfor"}, {"line": "\"chain commands in abbreviation"}, {"line": "cabbrev vrep tabe class.inc \\| tabe report.php ## chain commands [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Simple PHP debugging display all variables yanked into register a"}, {"line": "iab phpdb exit(\"<hr>Debug <C-R>a \");"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Using a register as a map (preload registers in .vimrc)"}, {"line": ":let @m=\":'a,'bs/\""}, {"line": ":let @s=\":%!sort -u\""}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Useful tricks"}, {"line": "\"ayy@a : execute \"Vim command\" in a text file"}, {"line": "yy@\" : same thing using unnamed register"}, {"line": "u@. : execute command JUST typed in"}, {"line": "\"ddw : store what you delete in register d [N]"}, {"line": "\"ccaw : store what you change in register c [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Get output from other commands (requires external programs)"}, {"line": ":r!ls -R : reads in output of ls"}, {"line": ":put=glob('**') : same as above [N]"}, {"line": ":r !grep \"^ebay\" file.txt : grepping in content [N]"}, {"line": ":20,25 !rot13 : rot13 lines 20 to 25 [N]"}, {"line": "!!date : same thing (but replaces/filters current line)"}, {"line": "\" Sorting with external sort"}, {"line": ":%!sort -u : use an external program to filter content"}, {"line": ":'a,'b!sort -u : use an external program to filter content"}, {"line": "!1} sort -u : sorts paragraph (note normal mode!!)"}, {"line": ":g/^$/;/^$/-1!sort : Sort each block (note the crucial ;)"}, {"line": "\" Sorting with internal sort"}, {"line": ":sort /.*\\%2v/ : sort all lines on second column [N]"}, {"line": "\" number lines (linux or cygwin only)"}, {"line": ":new | r!nl # [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Multiple Files Management (Essential)"}, {"line": ":bn : goto next buffer"}, {"line": ":bp : goto previous buffer"}, {"line": ":wn : save file and move to next (super)"}, {"line": ":wp : save file and move to previous"}, {"line": ":bd : remove file from buffer list (super)"}, {"line": ":bun : Buffer unload (remove window but not from list)"}, {"line": ":badd file.c : file from buffer list"}, {"line": ":b3 : go to buffer 3 [C]"}, {"line": ":b main : go to buffer with main in name eg main.c (ultra)"}, {"line": ":sav php.html : Save current file as php.html and \"move\" to php.html"}, {"line": ":sav! %<.bak : Save Current file to alternative extension (old way)"}, {"line": ":sav! %:r.cfm : Save Current file to alternative extension"}, {"line": ":sav %:s/fred/joe/ : do a substitute on file name"}, {"line": ":sav %:s/fred/joe/:r.bak2 : do a substitute on file name & ext."}, {"line": ":!mv % %:r.bak : rename current file (DOS use Rename or DEL)"}, {"line": ":help filename-modifiers"}, {"line": ":e! : return to unmodified file"}, {"line": ":w c:/aaa/% : save file elsewhere"}, {"line": ":e # : edit alternative file (also cntrl-^)"}, {"line": ":rew : return to beginning of edited files list (:args)"}, {"line": ":brew : buffer rewind"}, {"line": ":sp fred.txt : open fred.txt into a split"}, {"line": ":sball,:sb : Split all buffers (super)"}, {"line": ":scrollbind : in each split window"}, {"line": ":map <F5> :ls<CR>:e # : Pressing F5 lists all buffer, just type number"}, {"line": ":set hidden : Allows to change buffer w/o saving current buffer"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Quick jumping between splits"}, {"line": "map <C-J> <C-W>j<C-W>_"}, {"line": "map <C-K> <C-W>k<C-W>_"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Recording (BEST Feature of ALL)"}, {"line": "qq # record to q"}, {"line": "your complex series of commands"}, {"line": "q # end recording"}, {"line": "@q to execute"}, {"line": "@@ to Repeat"}, {"line": "5@@ to Repeat 5 times"}, {"line": "qQ@qq : Make an existing recording q recursive [N]"}, {"line": "\" editing a register/recording"}, {"line": "\"qp :display contents of register q (normal mode)"}, {"line": "<ctrl-R>q :display contents of register q (insert mode)"}, {"line": "\" you can now see recording contents, edit as required"}, {"line": "\"qdd :put changed contacts back into q"}, {"line": "@q :execute recording/register q"}, {"line": "\" Operating a Recording on a Visual BLOCK (blockwise)"}, {"line": "1) define recording/register"}, {"line": "qq:s/ to/ from/g^Mq"}, {"line": "2) Define Visual BLOCK"}, {"line": "V}"}, {"line": "3) hit : and the following appears"}, {"line": ":'<,'>"}, {"line": "4)Complete as follows"}, {"line": ":'<,'>norm @q"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\"combining a recording with a map (to end up in command mode)"}, {"line": "\"here we operate on a file with a recording, then move to the next file [N]"}, {"line": ":nnoremap ] @q:update<bar>bd"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Visual is the newest and usually the most intuitive editing mode"}, {"line": "\" Visual basics"}, {"line": "v : enter visual mode"}, {"line": "V : visual mode whole line"}, {"line": "<C-V> : enter VISUAL BLOCKWISE mode (remap on Windows to say C-Q *C*"}, {"line": "gv : reselect last visual area (ultra)"}, {"line": "o : navigate visual area"}, {"line": "\"*y or \"+y : yank visual area into paste buffer [C]"}, {"line": "V% : visualise what you match"}, {"line": "V}J : Join Visual block (great)"}, {"line": "V}gJ : Join Visual block w/o adding spaces"}, {"line": "`[v`] : Highlight last insert"}, {"line": ":%s/\\%Vold/new/g : Do a substitute on last visual area [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Delete 8th and 9th characters of 10 successive lines [C]"}, {"line": "08l<c-v>10j2ld (use Control Q on win32) [C]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" how to copy a set of columns using VISUAL BLOCK"}, {"line": "\" visual block (AKA columnwise selection) (NOT BY ordinary v command)"}, {"line": "<C-V> then select \"column(s)\" with motion commands (win32 <C-Q>)"}, {"line": "then c,d,y,r etc"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" how to overwrite a visual-block of text with another such block [C]"}, {"line": "\" move with hjkl etc"}, {"line": "Pick the first block: ctrl-v move y"}, {"line": "Pick the second block: ctrl-v move P <esc>"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" text objects :h text-objects [C]"}, {"line": "daW : delete contiguous non whitespace"}, {"line": "di< yi< ci< : Delete/Yank/Change HTML tag contents"}, {"line": "da< ya< ca< : Delete/Yank/Change whole HTML tag"}, {"line": "dat dit : Delete HTML tag pair"}, {"line": "diB daB : Empty a function {}"}, {"line": "das : delete a sentence"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" _vimrc essentials"}, {"line": ":imap <TAB> <C-N> : set tab to complete [N]"}, {"line": ":set incsearch : jumps to search word as you type (annoying but excellent)"}, {"line": ":set wildignore=*.o,*.obj,*.bak,*.exe : tab complete now ignores these"}, {"line": ":set shiftwidth=3 : for shift/tabbing"}, {"line": ":set vb t_vb=\". : set silent (no beep)"}, {"line": ":set browsedir=buffer : Maki GUI File Open use current directory"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" launching Win IE"}, {"line": ":nmap ,f :update<CR>:silent !start c:\\progra~1\\intern~1\\iexplore.exe file://%:p<CR>"}, {"line": ":nmap ,i :update<CR>: !start c:\\progra~1\\intern~1\\iexplore.exe <cWORD><CR>"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" FTPing from VIM"}, {"line": "cmap ,r :Nread ftp://209.51.134.122/public_html/index.html"}, {"line": "cmap ,w :Nwrite ftp://209.51.134.122/public_html/index.html"}, {"line": "gvim ftp://www.somedomain.com/index.html # uses netrw.vim"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" appending to registers (use CAPITAL)"}, {"line": "\" yank 5 lines into \"a\" then add a further 5"}, {"line": "\"a5yy"}, {"line": "10j"}, {"line": "\"A5yy"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "[I : show lines matching word under cursor <cword> (super)"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Conventional Shifting/Indenting"}, {"line": ":'a,'b>>"}, {"line": "\" visual shifting (builtin-repeat)"}, {"line": ":vnoremap < <gv"}, {"line": ":vnoremap > >gv"}, {"line": "\" Block shifting (magic)"}, {"line": ">i{"}, {"line": ">a{"}, {"line": "\" also"}, {"line": ">% and <%"}, {"line": "== : index current line same as line above [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Redirection & Paste register *"}, {"line": ":redir @* : redirect commands to paste buffer"}, {"line": ":redir END : end redirect"}, {"line": ":redir >> out.txt : redirect to a file"}, {"line": "\" Working with Paste buffer"}, {"line": "\"*yy : yank curent line to paste"}, {"line": "\"*p : insert from paste buffer"}, {"line": "\" yank to paste buffer (ex mode)"}, {"line": ":'a,'by* : Yank range into paste"}, {"line": ":%y* : Yank whole buffer into paste"}, {"line": ":.y* : Yank Current line to paster"}, {"line": "\" filter non-printable characters from the paste buffer"}, {"line": "\" useful when pasting from some gui application"}, {"line": ":nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>\"*p"}, {"line": ":set paste : prevent vim from formatting pasted in text *N*"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Re-Formatting text"}, {"line": "gq} : Format a paragraph"}, {"line": "gqap : Format a paragraph"}, {"line": "ggVGgq : Reformat entire file"}, {"line": "Vgq : current line"}, {"line": "\" break lines at 70 chars, if possible after a ;"}, {"line": ":s/.\\{,69\\};\\s*\\|.\\{,69\\}\\s\\+/&\\r/g"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Operate command over multiple files"}, {"line": ":argdo %s/foo/bar/e : operate on all files in :args"}, {"line": ":bufdo %s/foo/bar/e"}, {"line": ":windo %s/foo/bar/e"}, {"line": ":argdo exe '%!sort'|w! : include an external command"}, {"line": ":bufdo exe \"normal @q\" | w : perform a recording on open files"}, {"line": ":silent bufdo !zip proj.zip %:p : zip all current files"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Command line tricks"}, {"line": "gvim -h : help"}, {"line": "ls | gvim - : edit a stream!!"}, {"line": "cat xx | gvim - -c \"v/^\\d\\d\\|^[3-9]/d \" : filter a stream"}, {"line": "gvim -o file1 file2 : open into a horizontal split (file1 on top, file2 on bottom) [C]"}, {"line": "gvim -O file1 file2 : open into a vertical split (side by side,for comparing code) [N]"}, {"line": "\" execute one command after opening file"}, {"line": "gvim.exe -c \"/main\" joe.c : Open joe.c & jump to \"main\""}, {"line": "\" execute multiple command on a single file"}, {"line": "vim -c \"%s/ABC/DEF/ge | update\" file1.c"}, {"line": "\" execute multiple command on a group of files"}, {"line": "vim -c \"argdo %s/ABC/DEF/ge | update\" *.c"}, {"line": "\" remove blocks of text from a series of files"}, {"line": "vim -c \"argdo /begin/+1,/end/-1g/^/d | update\" *.c"}, {"line": "\" Automate editing of a file (Ex commands in convert.vim)"}, {"line": "vim -s \"convert.vim\" file.c"}, {"line": "\"load VIM without .vimrc and plugins (clean VIM) e.g. for HUGE files"}, {"line": "gvim -u NONE -U NONE -N"}, {"line": "\" Access paste buffer contents (put in a script/batch file)"}, {"line": "gvim -c 'normal ggdG\"*p' c:/aaa/xp"}, {"line": "\" print paste contents to default printer"}, {"line": "gvim -c 's/^/\\=@*/|hardcopy!|q!'"}, {"line": "\" gvim's use of external grep (win32 or *nix)"}, {"line": ":!grep somestring *.php : creates a list of all matching files [C]"}, {"line": "\" use :cn(ext) :cp(rev) to navigate list"}, {"line": ":h grep"}, {"line": "\" Using vimgrep with copen [N]"}, {"line": ":vimgrep /keywords/ *.php"}, {"line": ":copen"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" GVIM Difference Function (Brilliant)"}, {"line": "gvim -d file1 file2 : vimdiff (compare differences)"}, {"line": "dp : \"put\" difference under cursor to other file"}, {"line": "do : \"get\" difference under cursor from other file"}, {"line": "\" complex diff parts of same file [N]"}, {"line": ":1,2yank a | 7,8yank b"}, {"line": ":tabedit | put a | vnew | put b"}, {"line": ":windo diffthis "}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Vim traps"}, {"line": "In regular expressions you must backslash + (match 1 or more)"}, {"line": "In regular expressions you must backslash | (or)"}, {"line": "In regular expressions you must backslash ( (group)"}, {"line": "In regular expressions you must backslash { (count)"}, {"line": "/fred\\+/ : matches fred/freddy but not free"}, {"line": "/\\(fred\\)\\{2,3}/ : note what you have to break"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" \\v or very magic (usually) reduces backslashing"}, {"line": "/codes\\(\\n\\|\\s\\)*where : normal regexp"}, {"line": "/\\vcodes(\\n|\\s)*where : very magic"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" pulling objects onto command/search line (SUPER)"}, {"line": "<C-R><C-W> : pull word under the cursor into a command line or search"}, {"line": "<C-R><C-A> : pull WORD under the cursor into a command line or search"}, {"line": "<C-R>- : pull small register (also insert mode)"}, {"line": "<C-R>[0-9a-z] : pull named registers (also insert mode)"}, {"line": "<C-R>% : pull file name (also #) (also insert mode)"}, {"line": "<C-R>=somevar : pull contents of a variable (eg :let sray=\"ray[0-9]\")"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" List your Registers"}, {"line": ":reg : display contents of all registers"}, {"line": ":reg a : display content of register a"}, {"line": ":reg 12a : display content of registers 1,2 & a [N]"}, {"line": "\"5p : retrieve 5th \"ring\" "}, {"line": "\"1p.... : retrieve numeric registers one by one"}, {"line": ":let @y='yy@\"' : pre-loading registers (put in .vimrc)"}, {"line": "qqq : empty register \"q\""}, {"line": "qaq : empty register \"a\""}, {"line": ":reg .-/%:*\" : the seven special registers [N]"}, {"line": ":reg 0 : what you last yanked, not affected by a delete [N]"}, {"line": "\"_dd : Delete to blackhole register \"_ , don't affect any register [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" manipulating registers"}, {"line": ":let @a=@_ : clear register a"}, {"line": ":let @a=\"\" : clear register a"}, {"line": ":let @a=@\" : Save unnamed register [N]"}, {"line": ":let @*=@a : copy register a to paste buffer"}, {"line": ":let @*=@: : copy last command to paste buffer"}, {"line": ":let @*=@/ : copy last search to paste buffer"}, {"line": ":let @*=@% : copy current filename to paste buffer"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" help for help (USE TAB)"}, {"line": ":h quickref : VIM Quick Reference Sheet (ultra)"}, {"line": ":h tips : Vim's own Tips Help"}, {"line": ":h visual<C-D><tab> : obtain list of all visual help topics"}, {"line": " : Then use tab to step thru them"}, {"line": ":h ctrl<C-D> : list help of all control keys"}, {"line": ":helpg uganda : grep HELP Files use :cn, :cp to find next"}, {"line": ":helpgrep edit.*director: grep help using regexp"}, {"line": ":h :r : help for :ex command"}, {"line": ":h CTRL-R : normal mode"}, {"line": ":h /\\r : what's \\r in a regexp (matches a <CR>)"}, {"line": ":h \\\\zs : double up backslash to find \\zs in help"}, {"line": ":h i_CTRL-R : help for say <C-R> in insert mode"}, {"line": ":h c_CTRL-R : help for say <C-R> in command mode"}, {"line": ":h v_CTRL-V : visual mode"}, {"line": ":h tutor : VIM Tutor"}, {"line": "<C-]> : jump to {keyword} under cursor in help file [C]"}, {"line": "<C-[>, <C-T> : Move back & Forth in HELP History"}, {"line": "gvim -h : VIM Command Line Help"}, {"line": ":cabbrev h tab help : open help in a tab [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" where was an option set"}, {"line": ":scriptnames : list all plugins, _vimrcs loaded (super)"}, {"line": ":verbose set history? : reveals value of history and where set"}, {"line": ":function : list functions"}, {"line": ":func SearchCompl : List particular function"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" making your own VIM help"}, {"line": ":helptags /vim/vim64/doc : rebuild all *.txt help files in /doc"}, {"line": ":help add-local-help"}, {"line": "\" save this page as a VIM Help File [N]"}, {"line": ":sav! $VIMRUNTIME/doc/vimtips.txt|:1,/^__BEGIN__/d|:/^__END__/,$d|:w!|:helptags $VIMRUNTIME/doc"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" running file thru an external program (eg php)"}, {"line": "map <f9> :w<CR>:!c:/php/php.exe %<CR>"}, {"line": "map <f2> :w<CR>:!perl -c %<CR>"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" capturing output of current script in a separate buffer"}, {"line": ":new | r!perl # : opens new buffer,read other buffer"}, {"line": ":new! x.out | r!perl # : same with named file"}, {"line": ":new+read!ls"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" create a new buffer, paste a register \"q\" into it, then sort new buffer"}, {"line": ":new +put q|%!sort"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Inserting DOS Carriage Returns"}, {"line": ":%s/$/\\<C-V><C-M>&/g : that's what you type"}, {"line": ":%s/$/\\<C-Q><C-M>&/g : for Win32"}, {"line": ":%s/$/\\^M&/g : what you'll see where ^M is ONE character"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" automatically delete trailing Dos-returns,whitespace"}, {"line": "autocmd BufRead * silent! %s/[\\r \\t]\\+$//"}, {"line": "autocmd BufEnter *.php :%s/[ \\t\\r]\\+$//e"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" perform an action on a particular file or file type"}, {"line": "autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?"}, {"line": "autocmd FileType *.pl exec('set fileformats=unix')"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Retrieving last command line command for copy & pasting into text"}, {"line": "i<c-r>:"}, {"line": "\" Retrieving last Search Command for copy & pasting into text"}, {"line": "i<c-r>/"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" more completions"}, {"line": "<C-X><C-F> :insert name of a file in current directory"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Substituting a Visual area"}, {"line": "\" select visual area as usual (:h visual) then type :s/Emacs/Vim/ etc"}, {"line": ":'<,'>s/Emacs/Vim/g : REMEMBER you dont type the '<.'>"}, {"line": "gv : Re-select the previous visual area (ULTRA)"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" inserting line number into file"}, {"line": ":g/^/exec \"s/^/\".strpart(line(\".\").\" \", 0, 4)"}, {"line": ":%s/^/\\=strpart(line(\".\").\" \", 0, 5)"}, {"line": ":%s/^/\\=line('.'). ' '"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" *numbering lines VIM way*"}, {"line": ":set number : show line numbers"}, {"line": ":map <F12> :set number!<CR> : Show linenumbers flip-flop"}, {"line": ":%s/^/\\=strpart(line('.').\" \",0,&ts)"}, {"line": "\" numbering lines (need Perl on PC) starting from arbitrary number"}, {"line": ":'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'"}, {"line": "\" Produce a list of numbers"}, {"line": "\" Type in number on line say 223 in an empty file"}, {"line": "qqmnYP`n^Aq : in recording q repeat with @q"}, {"line": "\" increment existing numbers to end of file (type <c-a> as 5 characters)"}, {"line": ":.,$g/^\\d/exe \"normal! \\<c-a>\""}, {"line": "\" advanced incrementing"}, {"line": "http://vim.sourceforge.net/tip_view.php?tip_id=150"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" *advanced incrementing* (really useful)"}, {"line": "\" put following in _vimrc"}, {"line": "let g:I=0"}, {"line": "function! INC(increment)"}, {"line": "let g:I =g:I + a:increment"}, {"line": "return g:I"}, {"line": "endfunction"}, {"line": "\" eg create list starting from 223 incrementing by 5 between markers a,b"}, {"line": ":let I=223"}, {"line": ":'a,'bs/^/\\=INC(5)/"}, {"line": "\" create a map for INC"}, {"line": "cab viminc :let I=223 \\| 'a,'bs/$/\\=INC(5)/"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" *generate a list of numbers* 23-64"}, {"line": "o23<ESC>qqYp<C-A>q40@q"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" editing/moving within current insert (Really useful)"}, {"line": "<C-U> : delete all entered"}, {"line": "<C-W> : delete last word"}, {"line": "<HOME><END> : beginning/end of line"}, {"line": "<C-LEFTARROW><C-RIGHTARROW> : jump one word backwards/forwards"}, {"line": "<C-X><C-E>,<C-X><C-Y> : scroll while staying put in insert"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "#encryption (use with care: DON'T FORGET your KEY)"}, {"line": ":X : you will be prompted for a key"}, {"line": ":h :X"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" modeline (make a file readonly etc) must be in first/last 5 lines"}, {"line": "// vim:noai:ts=2:sw=4:readonly:"}, {"line": "\" vim:ft=html: : says use HTML Syntax highlighting"}, {"line": ":h modeline"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Creating your own GUI Toolbar entry"}, {"line": "amenu Modeline.Insert\\ a\\ VIM\\ modeline <Esc><Esc>ggOvim:ff=unix ts=4 ss=4<CR>vim60:fdm=marker<esc>gg"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" A function to save word under cursor to a file"}, {"line": "function! SaveWord()"}, {"line": " normal yiw"}, {"line": " exe ':!echo '.@0.' >> word.txt'"}, {"line": "endfunction"}, {"line": "map ,p :call SaveWord()"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" function to delete duplicate lines"}, {"line": "function! Del()"}, {"line": " if getline(\".\") == getline(line(\".\") - 1)"}, {"line": " norm dd"}, {"line": " endif"}, {"line": "endfunction"}, {"line": ""}, {"line": ":g/^/ call Del()"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Digraphs (non alpha-numerics)"}, {"line": ":digraphs : display table"}, {"line": ":h dig : help"}, {"line": "i<C-K>e' : enters \u00e9"}, {"line": "i<C-V>233 : enters \u00e9 (Unix)"}, {"line": "i<C-Q>233 : enters \u00e9 (Win32)"}, {"line": "ga : View hex value of any character"}, {"line": "#Deleting non-ascii characters (some invisible)"}, {"line": ":%s/[\\x00-\\x1f\\x80-\\xff]/ /g : type this as you see it"}, {"line": ":%s/[<C-V>128-<C-V>255]//gi : where you have to type the Control-V"}, {"line": ":%s/[\u0080-\u00ff]//gi : Should see a black square & a dotted y"}, {"line": ":%s/[<C-V>128-<C-V>255<C-V>01-<C-V>31]//gi : All pesky non-asciis"}, {"line": ":exec \"norm /[\\x00-\\x1f\\x80-\\xff]/\" : same thing"}, {"line": "#Pull a non-ascii character onto search bar"}, {"line": "yl/<C-R>\" :"}, {"line": "/[^a-zA-Z0-9_[:space:][:punct:]] : search for all non-ascii"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" All file completions grouped (for example main_c.c)"}, {"line": ":e main_<tab> : tab completes"}, {"line": "gf : open file under cursor (normal)"}, {"line": "main_<C-X><C-F> : include NAME of file in text (insert mode)"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Complex Vim"}, {"line": "\" swap two words"}, {"line": ":%s/\\<\\(on\\|off\\)\\>/\\=strpart(\"offon\", 3 * (\"off\" == submatch(0)), 3)/g"}, {"line": "\" swap two words"}, {"line": ":vnoremap <C-X> <Esc>`.``gvP``P"}, {"line": "\" Swap word with next word"}, {"line": "nmap <silent> gw \"_yiw:s/\\(\\%#\\w\\+\\)\\(\\_W\\+\\)\\(\\w\\+\\)/\\3\\2\\1/<cr><c-o><c-l> [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Convert Text File to HTML"}, {"line": ":runtime! syntax/2html.vim : convert txt to html"}, {"line": ":h 2html"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" VIM has internal grep"}, {"line": ":grep some_keyword *.c : get list of all c-files containing keyword"}, {"line": ":cn : go to next occurrence"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Force Syntax coloring for a file that has no extension .pl"}, {"line": ":set syntax=perl"}, {"line": "\" Remove syntax coloring (useful for all sorts of reasons)"}, {"line": ":set syntax off"}, {"line": "\" change coloring scheme (any file in ~vim/vim??/colors)"}, {"line": ":colorscheme blue"}, {"line": ":colorscheme morning : good fallback colorscheme *N*"}, {"line": "\" Force HTML Syntax highlighting by using a modeline"}, {"line": "# vim:ft=html:"}, {"line": "\" Force syntax automatically (for a file with non-standard extension)"}, {"line": "au BufRead,BufNewFile */Content.IE?/* setfiletype html"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": ":set noma (non modifiable) : Prevents modifications"}, {"line": ":set ro (Read Only) : Protect a file from unintentional writes"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Sessions (Open a set of files)"}, {"line": "gvim file1.c file2.c lib/lib.h lib/lib2.h : load files for \"session\""}, {"line": ":mksession : Make a Session file (default Session.vim)"}, {"line": ":mksession MySession.vim : Make a Session file named file [C]"}, {"line": ":q"}, {"line": "gvim -S : Reload all files (loads Session.vim) [C]"}, {"line": "gvim -S MySession.vim : Reload all files from named session [C]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "#tags (jumping to subroutines/functions)"}, {"line": "taglist.vim : popular plugin"}, {"line": ":Tlist : display Tags (list of functions)"}, {"line": "<C-]> : jump to function under cursor"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" columnise a csv file for display only as may crop wide columns"}, {"line": ":let width = 20"}, {"line": ":let fill=' ' | while strlen(fill) < width | let fill=fill.fill | endwhile"}, {"line": ":%s/\\([^;]*\\);\\=/\\=strpart(submatch(1).fill, 0, width)/ge"}, {"line": ":%s/\\s\\+$//ge"}, {"line": "\" Highlight a particular csv column (put in .vimrc)"}, {"line": "function! CSVH(x)"}, {"line": " execute 'match Keyword /^\\([^,]*,\\)\\{'.a:x.'}\\zs[^,]*/'"}, {"line": " execute 'normal ^'.a:x.'f,'"}, {"line": "endfunction"}, {"line": "command! -nargs=1 Csv :call CSVH(<args>)"}, {"line": "\" call with"}, {"line": ":Csv 5 : highlight fifth column"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "zf1G : fold everything before this line [N]"}, {"line": "\" folding : hide sections to allow easier comparisons"}, {"line": "zf} : fold paragraph using motion"}, {"line": "v}zf : fold paragraph using visual"}, {"line": "zf'a : fold to mark"}, {"line": "zo : open fold"}, {"line": "zc : re-close fold"}, {"line": "\" also visualise a section of code then type zf [N]"}, {"line": ":help folding"}, {"line": "zfG : fold everything after this line [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" displaying \"non-asciis\""}, {"line": ":set list"}, {"line": ":h listchars"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" How to paste \"normal vim commands\" w/o entering insert mode"}, {"line": ":norm qqy$jq"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" manipulating file names"}, {"line": ":h filename-modifiers : help"}, {"line": ":w % : write to current file name"}, {"line": ":w %:r.cfm : change file extention to .cfm"}, {"line": ":!echo %:p : full path & file name"}, {"line": ":!echo %:p:h : full path only"}, {"line": ":!echo %:t : filename only"}, {"line": ":reg % : display filename"}, {"line": "<C-R>% : insert filename (insert mode)"}, {"line": "\"%p : insert filename (normal mode)"}, {"line": "/<C-R>% : Search for file name in text"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" delete without destroying default buffer contents"}, {"line": "\"_d : what you've ALWAYS wanted"}, {"line": "\"_dw : eg delete word (use blackhole)"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" pull full path name into paste buffer for attachment to email etc"}, {"line": "nnoremap <F2> :let @*=expand(\"%:p\")<cr> :unix"}, {"line": "nnoremap <F2> :let @*=substitute(expand(\"%:p\"), \"/\", \"\\\\\", \"g\")<cr> :win32"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Simple Shell script to rename files w/o leaving vim"}, {"line": "$ vim"}, {"line": ":r! ls *.c"}, {"line": ":%s/\\(.*\\).c/mv & \\1.bla"}, {"line": ":w !sh"}, {"line": ":q!"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" count words/lines in a text file"}, {"line": "g<C-G> # counts words"}, {"line": ":echo line(\"'b\")-line(\"'a\") # count lines between markers a and b [N]"}, {"line": ":'a,'bs/^//n # count lines between markers a and b"}, {"line": ":'a,'bs/somestring//gn # count occurences of a string"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" example of setting your own highlighting"}, {"line": ":syn match DoubleSpace \" \""}, {"line": ":hi def DoubleSpace guibg=#e0e0e0"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" reproduce previous line word by word"}, {"line": "imap ] @@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s"}, {"line": "nmap ] i@@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s"}, {"line": "\" Programming keys depending on file type"}, {"line": ":autocmd bufenter *.tex map <F1> :!latex %<CR>"}, {"line": ":autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR>"}, {"line": "\" allow yanking of php variables with their dollar [N]"}, {"line": ":autocmd bufenter *.php :set iskeyword+=\\$ "}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" reading Ms-Word documents, requires antiword (not docx)"}, {"line": ":autocmd BufReadPre *.doc set ro"}, {"line": ":autocmd BufReadPre *.doc set hlsearch!"}, {"line": ":autocmd BufReadPost *.doc %!antiword \"%\""}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" a folding method"}, {"line": "vim: filetype=help foldmethod=marker foldmarker=<<<,>>>"}, {"line": "A really big section closed with a tag <<< "}, {"line": "--- remember folds can be nested --- "}, {"line": "Closing tag >>> "}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" Return to last edit position (You want this!) [N]"}, {"line": "autocmd BufReadPost *"}, {"line": " \\ if line(\"'\\\"\") > 0 && line(\"'\\\"\") <= line(\"$\") |"}, {"line": " \\ exe \"normal! g`\\\"\" |"}, {"line": " \\ endif"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" store text that is to be changed or deleted in register a"}, {"line": "\"act< : Change Till < [N]"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\"installing/getting latest version of vim on Linux (replace tiny-vim) [N]"}, {"line": "yum install vim-common vim-enhanced vim-minimal"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "# using gVIM with Cygwin on a Windows PC"}, {"line": "if has('win32')"}, {"line": "source $VIMRUNTIME/mswin.vim"}, {"line": "behave mswin"}, {"line": "set shell=c:\\\\cygwin\\\\bin\\\\bash.exe shellcmdflag=-c shellxquote=\\\""}, {"line": "endif"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" *Just Another Vim Hacker JAVH*"}, {"line": "vim -c \":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?\""}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "vim:tw=78:ts=8:ft=help:norl:"}, {"line": "__END__"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\"Read Vimtips into a new vim buffer (needs w3m.sourceforge.net)"}, {"line": ":tabe | :r ! w3m -dump \"http://zzapper.co.uk/vimtips.html\" [C]"}, {"line": ":silent r ! lynx -dump \"http://zzapper.co.uk/vimtips.html\" [N]"}, {"line": "\" read webpage source html into vim"}, {"line": "gvim http://www.zzapper.co.uk/vimtips.html &"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "updated version at http://www.zzapper.co.uk/vimtips.html"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "Please email any errors, tips etc to"}, {"line": "[email protected]"}, {"line": "\" Information Sources"}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "www.vim.org"}, {"line": "Vim Wiki *** VERY GOOD *** [N]"}, {"line": "Vim Use VIM newsgroup [N]"}, {"line": "comp.editors"}, {"line": "groups.yahoo.com/group/vim \"VIM\" specific newsgroup"}, {"line": "VIM Webring"}, {"line": "VimTips PDF Version (PRINTABLE!)"}, {"line": "Vimtips in Belarusian "}, {"line": "...................................................................................................."}, {"line": "...................................................................................................."}, {"line": "\" : commands to neutralise "}, {"line": ""}]