1.键盘命令 (不是命令行中的命令)
Working withfiles | |
Vim command | Action |
:e filename | Open a new file. You can use the Tab key for automatic file namecompletion, just like at the shell command prompt. |
:w filename | Save changes to a file. If you don't specify a file name, Vim savesas the file name you were editing. For saving the file under adifferent name, specify the file name. |
:q | Quit Vim. If you have unsaved changes, Vim refuses to exit. |
:q! | Exit Vim without saving changes. |
:wq | Write the file and exit. |
:x | Almost the same as :wq, write the file and exit if you've madechanges to the file. If you haven't made any changes to the file,Vim exits without writing the file. |
Moving around in the file | |
These Vim commands and keys work both in command mode and visualmode. | |
Vim command | Action |
j or Up Arrow | Move the cursor up one line. |
k or Down Arrow | Down one line. |
h or Left Arrow | Left one character. |
l or Right Arrow | Right one character. |
e | To the end of a word. |
E | To the end of a whitespace-delimited word. |
b | To the beginning of a word. |
B | To the beginning of a whitespace-delimited word. |
0 | To the beginning of a line. |
^ | To the first non-whitespace character of a line. |
$ | To the end of a line. |
H | To the first line of the screen. |
M | To the middle line of the screen. |
L | To the the last line of the screen. |
:n | Jump to line number |
Inserting and overwriting text | |
Vim command | Action |
i | Insert before cursor. |
I | Insert to the start of the current line. |
a | Append after cursor. |
A | Append to the end of the current line. |
o | Open a new line below and insert. |
O | Open a new line above and insert. |
C | Change the rest of the current line. |
r | Overwrite one character. After overwriting the single character, goback to command mode. |
R | Enter insert mode but replace characters rather thaninserting. |
The ESC key | Exit insert/overwrite mode and go back to command mode. |
Deleting text | |
Vim command | Action |
x | Delete characters under the cursor. |
X | Delete characters before the cursor. |
dd or :d | Delete the current line. |
Entering visual mode | |
Vim command | Action |
v | Start highlighting characters. Use thenormal |
V | Start highlighting lines. |
The ESC key | Exit visual mode and return to command mode. |
Editing blocks of text | |
Note: the Vim commands marked with (V) work in visual mode, whenyou've selected some text. The other commands work in the commandmode, when you haven't selected any text. | |
Vim command | Action |
~ | Change the case of characters. This works both in visual andcommand mode. In visual mode, change the case of highlightedcharacters. In command mode, change the case of the character udercursor. |
> (V) | Shift right (indent). |
< (V) | Shift left (de-indent). |
c (V) | Change the highlighted text. |
y (V) | Yank the highlighted text. In Windows terms, "copy the selectedtext to clipboard." |
d (V) | Delete the highlighted text. In Windows terms, "cut the selectedtext to clipboard." |
yy or :y or Y | Yank the current line. You don't need to highlight it first. |
dd or :d | Delete the current line. Again, you don't need to highlight itfirst. |
p | Put the text you yanked or deleted. In Windows terms, "paste thecontents of the clipboard". Put characters after the cursor. Putlines below the current line. |
P | Put characters before the cursor. Put lines above the currentline. |
Undo and redo | |
Vim command | Action |
u | Undo the last action. |
U | Undo all the latest changes that were made to the currentline. |
Ctrl + r | Redo. |
Search | |
Vim command | Action |
/pattern | Search the file for |
n | Scan for next search match in the same direction. |
N | Scan for next search match but opposite direction. |
Replace | |
Vim command | Action |
:rs/foo/bar/a | Substitute |
The range (r) can be | |
nothing | Work on current line only. |
number | Work on the line whose number you give. |
% | The whole file. |
Arguments (a) can be | |
g | Replace all occurrences in the line. Without this, Vim replacesonly the first occurrences in each line. |
i | Ignore case for the search pattern. |
I | Don't ignore case. |
c | Confirm each substitution. You can type y to substitute this match,n to skip this match, a to substitute this and all the remainingmatches ("Yes to all"), and q to quit substitution. |
Examples | |
:452s/foo/bar/ | Replace the first occurrence of theword |
:s/foo/bar/g | Replace every occurrence of theword |
:%s/foo/bar/g | Replace every occurrence of theword |
:%s/foo/bar/gi | The same as above, but ignore the case of the pattern you want tosubstitute. Thisreplaces |
:%s/foo/bar/gc | Confirm every substitution. |
:%s/foo/bar/c | For each line on the file, replace the first occurrenceof |
2.安装omnicppcomplete可以为C/C++中struct/class提供补全功能
但需要按照其doc中说明的那样执行ctags
omnicppcomplete解压之后的文件要放在%HOMEPATH%\vimfiles\目录下,和.vimrc在一起(注意,不是vim安装文件,c-xc-o在omnicppcomplete安装后才有用)
3. vim记录功能
4.查看脚本位置
" 输出所有带有VIM设置的地址
:scriptnames
" 输入VIM是从哪里寻找vimrc文件的
:version
:map后面不加任何参数,则会列出当前所有的映射
" 输出所有带有VIM设置的地址
:scriptnames
" 输入VIM是从哪里寻找vimrc文件的
:version
:map后面不加任何参数,则会列出当前所有的映射
5. 取消高亮
6. 区域内替换
以第一条命令为例,第二条命令和第一条命令类似:
:'<,'>s/BIT_MASK_\zs\d*\ze/\=line(".") - line("'<") + 1
这条命令在我们选中的区域内进行替换,查找以”BIT_MASK_”开头,后面跟任意多个数字的字符串,并把匹配位置放在数字上,然后使用后面表达式计算出来的数字替换这些匹配的数字。
下面是这条命令中每个元素的含义:
'<,'> 我们所选中的区域 (:help '<,:help '> )
s 在选中的区域中进行替换 (:help :s )
\zs 指明匹配由此开始 (:help /\zs )
\d* 查找任意位数的数字 (:help /\d )
\ze 指明匹配到此为止 (:help /\ze )
\= 指明后面是一个表达式 (:help :s\= )
line(".") 当前光标所在行的行号 (:help line() )
line("'<") 我们所选区域中第一行的行号 (:help line() )
‘<和’>是我们使用了”v”,”V”命令选中一个visual区域后,VIM设置的标记,分别用来标识visual区域的开始和结束。
“BIT_MASK_\zs\d*\ze”是一个正则表达式,用来查找以”BIT_MASK_”开头,后面跟任意多个数字的字符串。其中”\zs”、”\ze”用来指定匹配的开始和结束位置,因为我们只打算替换”BIT_MASK_0″中的数字,所以在查找时只把匹配区域置在数字上。
由于我们的替换操作要把不同行的数字替换成不同的值,所以在这里需要使用一个表达式来计算出替换后的值。当”:s”命令的替换字符串是以”\=”开头时,表明使用一个表达式计算的结果进行替换。我们这里的表达式就是”line(“.”)– line(“‘<”) +1″,其中”line()”函数用来获得行号,它可以获得当前行的行号,以及指定的标记(mark)所在的行号。”line(“.”)”用来获得当前光标所在行的行号,”line(“‘<”)”则用来获得”‘<”标记所在行的行号。这两个行号的差加上1就是我们想替换的值。
7. 撤销,重做
撤销:u
8.搜索中的特殊字符
特殊字符。在搜索命令中, .*[]^%/?~$这10个字符有着特殊意义,所以在使用这些字符的时候要在前面加上一个反斜杠/。而\e表示<esc>;\t表示<tab>;\r表示<cr>;\b表示<bs>。
匹配换行或空格。
使用\n可以表示一个换行;
而\s表示匹配空白,注意是空白不是空格。\_s表示匹配换行或者空格;
\_a表示匹配换行或者一个字母。
比如:/the\nword查找以the结束并且下一行以word开始的行的位置。/the\_sword查找the和word之间以空白或者换行分割的位置。/the\_s\+word表示the和word之间可以有多个空白。\+的含义可以在后面找到。
限定词首或者词尾。\<可以限定找到是以指定字符串开始的单词。比如/\<the可以找到以the开始在字符串,但是会忽略在单词中间包含the的字符串。而\>则是限定必须是以指定字符串结尾的单词。
行首和行尾。输入/^string查找以string开始的行,并且光标停留在这个string的第一个字符。输入/string$则查找以string结束的行,并将光标停留在这个string的第一个字符。这个模式不会忽略前导或者后置的空格。
匹配任何一个字符。句号.可以匹配任何一个字符。例如/t.e可以找到the或者tae或者tue。
^匹配行首
$匹配行尾
\w表示C语言中可以组成变量名的符号(字母 数字下划线之类)
8. 排序并删除相同的行
: sortu
9.记录操作
宏:vim可以自行记录一个宏。你键入"qa"开始把一段宏记录入寄存器变量‘a’中。接下来像平常一样键入要的操作,只是这些操作都会被Vim记录进它命名为‘a’的宏中, 再次再下"q"键,就结束了‘a’的录制。当你要重复执行你刚才记录的那些操作时只要使用"@a"命令。共有26个可用的寄存器供你记录宏。不只是插入,其他的操作也可以使用宏。
q
@[a-z]
@@
10.正则表达式
1.替换变量
在正规表达式中使用 \( 和 \)符号括起正规表达式,即可在后面使用\1、\2等变量来访问\( 和\)中的内容。
将 AB替换为 B A
在正规表达式中使用 \( 和 \)符号括起正规表达式,即可在后面使用\1、\2等变量来访问\( 和\)中的内容。
将
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1
将A, B替换为 B A
:%s/\(\w\+\), \(\w\+\)/\2 \1/
给所有字母或数字加上双引号
%s/\(\w\)/"\1"/g
将A, B替换为
:%s/\(\w\+\), \(\w\+\)/\2 \1/
给所有字母或数字加上双引号
%s/\(\w\)/"\1"/g
/字符串
?字符串
*
n
:起始行,结束行s/搜索串/替换串/g
:set
例如
搜索字符串用的是正规表达式(Regular
\
[]
[^]
.
*
\+
\?
^
$
\(\)
\数字
对于替换字符串,可以用“&”代表整个搜索字符串,或者用“\数字”代表搜索字符串中的某段括住的表达式。
举一个复杂的例子,把文中的所有字符串“abc……xyz”替换为“xyz……abc”可以有下列写法:
:%s/abc\(.*\)xyz/xyz\1abc/g
:%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g
其它关于正规表达式搜索替换的更详细准确的说明请看
列编辑模式
多行插入字符:
ctrl-v
vimrc中增加函数
function PlateTestXML() "函数声明
:%s/abc="[12234567890]\+"//g "删除:abc="12" abc="455"等
:%s/xyz="[:12234567890]\+"//g "删除: xyz="12:4"xyz=":123"等
endfunction
map <F5> :call PlateTestXML()<CR> "映射F5调用该函数
vim记录及播放
esc+q+a
开始记录,并把记录保存在寄存器a中
q
退出记录
84@a
把寄存器a中的记录重复84次
vim显示当前文件目录
1 然后 ctrl-G
xp: 交换前后两个字符
ddp: 交换当前行和下一行
ctags:
c - ] 跳转到declartion, g c-]跳转到definition
vimgrep /func/ **/*.{c,h} 在所有子目录下h 和 c文件搜索 func
vim 多文件替换
args / argdo
vimrc中可以增加set nomore避免多次回车
vim多文件查找
grep或vimgrep
vim对齐文件中所有代码
gg=G
vim处理gcc反馈
gcc的 make命令执行的程序为vim变量makeprg的值,默认makeprg=make,例如:
:set makeprg=gcc\ hello.c\ -o\ hello
变量的值为字符串,当在其中有空格时需要用\进行转义,同样如果想输入\也要进行转义。