Daily vim – Grand collection

working with Blocks

di> (“delete inner angle-block”)

ci” (“change inner double-quote block”)

daw, dap, dab

caw, cap, cab

>ib, <ib, >iB, >i}, >i)

%

= (auto indent selected text & auto format base on file type)

q     start/stop record macros

“+y (copy to clipboard)

“+p (paste from clipboard)

dst, cst, cs”) (vim surround)

ysiw) , yssB (vim surround) – ys then select operator fast (y-s-s fast)

“dyy, “a7yy (make use of buffer a, d)

“dp, “ap ( use a,d buffer)

“a5dd

-> “d command (do command with buffer d)

:reg

y,d,c + movement (H,M,L,),},])

:g/pattern/s/old/new/g (ex search combine with replace)

study unix commands for this \(^o^)

:.,$!sort -g

:%!sort -d

(and etc…)

working with tags

:tags (show tags browse route)

:tn, :tp (tag next, tag pre)

:ts [ident] list the tags match [ident] , :sts [ident] with split window (can specify ‘vert’ for vertical split)

g] (list)

^] (go direct to 1st tag def.)

working with completion

^X [^F, ^L, ^D, ^I, ^K, ^T, ^], ^V, ^O, ^N, ^P]     file,line,def,directory,words,tags,vimcmd,include f,next,pre

working with tabs

:tabs list all tabs

:tabm 0 move tab to first

:tabm move tab to last

:tabm {i} move tab to i+1

gt, gT, {i}gt move to tab in position i

gi : go to insert mode where you left it last time

g+,g- : undo state / branches ?

zo,zc,zR(open all folds),zM(close all folds),zj,zk(navi)

Vim navi

(), {}, [[]], -/+ (movement)

fx, Fx, tx, Tx, ; ,

:Explore (vim default file explorer)

<C-d> : list posibilities – combine with Tab

:vimgrep, :Ack (o, go, t, T, h, H, v, gv, q)

:go NNN      go to byte NNN

‘.     jump to last modification line

`.     jump to exact spot in last modification line

<C-O>     retrace your movements in file (backward)

<C-I>     retrace your movements in file (forward)

:ju(mps)     list of your movements

:history     list of all your commands

:source $MYVIMRC reload vimrc

Vim command help

<C-d> : list all commands base on input chars

<C-f> : browse history base on input chars

<TAB> : auto complete, loop through all commands base on input chars

Set filetype for syntax highlighting & auto format

:set filetype=[file type]

file type can be php, html, sql, xml , js or cpp …

Working with diff

vert diffsplit [file to compare]

:[range]diffg[et]

:[range]diffpu[t]

do     :[range]diffg[et] without range

dp     :[range]diffpu[t] without range

:diffoff

Tools

:TOhtml     export content of current file to html (theme included).

Sessions (not so useful with plugin -> turn off plugin like NERDtree before mksession)

:mksession [session name].vim     make session

:source [session name].vim     restore session

vim -S [session name].vim     start vim with specific session.

Vim and terminal

:%! [cmd]

:read ! [cmd]

:!php -l %     check php syntax

Auto complete base on context – Object

place DocBlock notation under variable:

/*@var $_product Mage_Catalog_Model_Product*/

Working with text case

guu     : lowercase line

gUU     : uppercase line

~       : invert case (upper->lower; lower->upper) of current character

gf      : open file name under cursor (SUPER)

ga      : display hex, ascii value of character under cursor

g8      : display hex value of utf-8 character under cursor

ggg?G   : rot13 whole file

xp      : swap next two characters around

CTRL-A,CTRL-X : increment, decrement next number on same line as the cursor

CTRL-R=5*5    : insert 25 into text

=             : (re)indent the text on the current line or on the area selected (SUPER)

=%            : (re)indent the current braces { … }

G=gg          : auto (re)indent entire document

pssh secret!!!

help 42 -> help holy-grail

collaborate with shell

:r!ls                 : reads in output of ls (use dir on Windows)

:r !grep “^ebay” file.txt  : read output of grep

:20,25 !rot13        : rot13 lines 20 to 25

:r!date              : insert date (use  date /T on Windows)

:.!sh                : execute contents of current line in buffer and capture the output

Sorting with external sort

:%!sort -u           : contents of the current file is sorted and only unique lines are kept

:’v,’w!sort          : sort from line marked v thru lines marked w

:g/^$/;,/^$/-1!sort  : sort each block (note the crucial 😉

!1} sort             : sorts paragraph; this is issued from normal mode!)

Entering !! in normal mode is translated to  :.!

Appending a command sends the current line to the command replacing it with command’s result

!!date              : Replace current line with date

!!which command     : Replace current line with the absolute path to command

!!tr -d AEIO        : translate current line deleting As, Es, Is, and Os from the current line

You can also use ! on a visual selection. Select an area with one of the visualmode

commands, and then type !command to pipe the whole selection through command.

This is equivalent to :'<,’>!command.

For example, after selecting multiple lines with visualmode:

!sort              : sort selected lines

!grep word         : keep only lines containing ‘word’ in the selected range.