从 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 with somethingelse
|
替换
:%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
|