从 1970 年开始,vi 和 vim 就成为了程序员最喜爱的文本编辑器之一。5年前,我写了一个问自己名为 “每个程序员都应该知道的 100 个 vim 命令” 这次算是之前那篇文章的改进版,希望你会喜欢。 基础| :e filename | Open filename for edition | | :w | Save file | | :q | Exit Vim | | :q! | Quit without saving | | :x | Write file (if changes has been made) and exit | | :sav filename | Saves file as filename | | . | Repeats the last change made in normal mode | | 5. | Repeats 5 times the last change made in normal mode |
在文件中移动| k or Up Arrow | move the cursor up one line | | j or Down Arrow | move the cursor down one line | | e | move the cursor to the end of the word | | b | move the cursor to the begining of the word | | 0 | move the cursor to the begining of the line | | G | move the cursor to the end of the line | | gg | move the cursor to the begining of the file | | L | move the cursor to the end of the file | | :59 | move cursor to line 59. Replace 59 by the desired line number. | | 20| | move cursor to column 20. | | % | Move cursor to matching parenthesis | | [[ | Jump to function start | | [{ | Jump to block start |
剪切、复制和粘贴| y | Copy the selected text to clipboard | | p | Paste clipboard contents | | dd | Cut current line | | yy | Copy current line | | y$ | Copy to end of line | | D | Cut to end of line |
搜索| /word | Search word from top to bottom | | ?word | Search word from bottom to top | | * | Search the word under cursor | | /\cstring | Search STRING or string, case insensitive | | /jo[ha]n | Search john or joan | | /\< the | Search the, theatre or then | | /the\> | Search the or breathe | | /\< the\> | Search the | | /\< ¦.\> | Search all words of 4 letters | | /\/ | Search fred but not alfred or frederick | | /fred\|joe | Search fred or joe | | /\<\d\d\d\d\> | Search exactly 4 digits | | /^\n\{3} | Find 3 empty lines | | :bufdo /searchstr/ | Search in all open files | | bufdo %s/something/somethingelse/g | Search something in all the open buffers and replace it withsomethingelse |
替换| :%s/old/new/g | Replace all occurences of old by new in file | | :%s/onward/forward/gi | Replace onward by forward, case unsensitive | | :%s/old/new/gc | Replace all occurences with confirmation | | :2,35s/old/new/g | Replace all occurences between lines 2 and 35 | | :5,$s/old/new/g | Replace all occurences from line 5 to EOF | | :%s/^/hello/g | Replace the begining of each line by hello | | :%s/$/Harry/g | Replace the end of each line by Harry | | :%s/onward/forward/gi | Replace onward by forward, case unsensitive | | :%s/ *$//g | Delete all white spaces | | :g/string/d | Delete all lines containing string | | :v/string/d | Delete all lines containing which didn’t contain string | | :s/Bill/Steve/ | Replace the first occurence of Bill by Steve in current line | | :s/Bill/Steve/g | Replace Bill by Steve in current line | | :%s/Bill/Steve/g | Replace Bill by Steve in all the file | | :%s/^M//g | Delete DOS carriage returns (^M) | | :%s/\r/\r/g | Transform DOS carriage returns in returns | | :%s#<[^>]\+>##g | Delete HTML tags but keeps text | | :%s/^\(.*\)\n\1$/\1/ | Delete lines which appears twice | | Ctrl+a | Increment number under the cursor | | Ctrl+x | Decrement number under cursor | | ggVGg? | Change text to Rot13 |
大小写| Vu | Lowercase line | | VU | Uppercase line | | g~~ | Invert case | | vEU | Switch word to uppercase | | vE~ | Modify word case | | ggguG | Set all text to lowercase | | gggUG | Set all text to uppercase | | :set ignorecase | Ignore case in searches | | :set smartcase | Ignore case in searches excepted if an uppercase letter is used | | :%s/\<./\u&/g | Sets first letter of each word to uppercase | | :%s/\<./\l&/g | Sets first letter of each word to lowercase | | :%s/.*/\u& | Sets first letter of each line to uppercase | | :%s/.*/\l& | Sets first letter of each line to lowercase |
读写文件| :1,10 w outfile | Saves lines 1 to 10 in outfile | | :1,10 w >> outfile | Appends lines 1 to 10 to outfile | | :r infile | Insert the content of infile | | :23r infile | Insert the content of infile under line 23 |
文件浏览器| :e . | Open integrated file explorer | | :Sex | Split window and open integrated file explorer | | :Sex! | Same as :Sex but split window vertically | | :browse e | Graphical file explorer | | :ls | List buffers | | :cd .. | Move to parent directory | | :args | List files | | :args *.php | Open file list | | :grep expression *.php | Returns a list of .php files contening expression | | gf | Open file name under cursor |
和 Unix 系统交互| :!pwd | Execute the pwd unix command, then returns to Vi | | !!pwd | Execute the pwd unix command and insert output in file | | :sh | Temporary returns to Unix | | $exit | Retourns to Vi |
对齐| :%!fmt | Align all lines | | !}fmt | Align all lines at the current position | | 5!!fmt | Align the next 5 lines |
Tabs/Windows| :tabnew | Creates a new tab | | gt | Show next tab | | :tabfirst | Show first tab | | :tablast | Show last tab | | :tabm n(position) | Rearrange tabs | | :tabdo %s/foo/bar/g | Execute a command in all tabs | | :tab ball | Puts all open files in tabs | | :new abc.txt | Edit abc.txt in new window |
分屏显示| :e filename | Edit filename in current window | | :split filename | Split the window and open filename | | ctrl-w up arrow | Puts cursor in top window | | ctrl-w ctrl-w | Puts cursor in next window | | ctrl-w_ | Maximize current window vertically | | ctrl-w| | Maximize current window horizontally | | ctrl-w= | Gives the same size to all windows | | 10 ctrl-w+ | Add 10 lines to current window | | :vsplit file | Split window vertically | | :sview file | Same as :split in readonly mode | | :hide | Close current window | | :nly | Close all windows, excepted current | | :b 2 | Open #2 in this window |
自动完成| Ctrl+n Ctrl+p (in insert mode) | Complete word | | Ctrl+x Ctrl+l | Complete line | | :set dictionary=dict | Define dict as a dictionnary | | Ctrl+x Ctrl+k | Complete with dictionnary |
Marks| m {a-z} | Marks current position as {a-z} | | ' {a-z} | Move to position {a-z} | | '' | Move to previous position |
缩写| :ab mail mail@provider.org | Define mail as abbreviation of mail@provider.org |
文本缩进| :set autoindent | Turn on auto-indent | | :set smartindent | Turn on intelligent auto-indent | | :set shiftwidth=4 | Defines 4 spaces as indent size | | ctrl-t, ctrl-d | Indent/un-indent in insert mode | | >> | Indent | | << | Un-indent | | =% | Indent the code between parenthesis | | 1GVG= | Indent the whole file |
语法高亮| :syntax on | Turn on syntax highlighting | | :syntax off | Turn off syntax highlighting | | :set syntax=perl | Force syntax highlighting |
via catswhocode |