vim tips


 
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 n. For example, tojump to line 42, you'd type :42
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 movement keys and commands to selecttext for highlighting.
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 pattern.
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 foo with barr determinesthe rangeand a determines thearguments.
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 foo with bar online number 452.
:s/foo/bar/g Replace every occurrence of theword foo with bar oncurrent line.
:%s/foo/bar/g Replace every occurrence of theword foo with bar inthe whole file.
:%s/foo/bar/gi The same as above, but ignore the case of the pattern you want tosubstitute. Thisreplaces fooFOOFoo,and so on.
:%s/foo/bar/gc Confirm every substitution.
:%s/foo/bar/c For each line on the file, replace the first occurrenceof foo with bar andconfirm every substitution.

 zz  把当前行放置到屏幕中心

            搜索匹配的位置(比如括号,ifdef/endif)
 m[a-z,A-Z]   设置标志 a-z是局部标志 作用范围是文件 A-Z 是全局变量 可以在不同文件中跳跃
 '[a-z,A-Z]   跳跃到指定标志所在位置
 
  ctags启动后
 ctrl-]       ctags启动后,跳到定义位置
 'T           大写T,ctags启动后,返回跳跃前位置
  gd          跳转到局部变量的定义位置
            光标下单词下一个出现位置
            光标下单词上一个出现位置
 



  ctrl-o 跳转到上一个位置(可以跨文件跳转)
 n%           n是0-100的数字,跳转到百分之n的位置


 


 yy           复制当前行
            移动到行首
            移动到行尾
 c-f  向下翻页
 c-b  向上翻页
 ngg  跳转到第n行
 gg  跳转到第一行
            跳转到最后一行
 


 


2.安装omnicppcomplete可以为C/C++中struct/class提供补全功能
  但需要按照其doc中说明的那样执行ctags
 omnicppcomplete解压之后的文件要放在%HOMEPATH%\vimfiles\目录下,和.vimrc在一起(注意,不是vim安装文件,c-xc-o在omnicppcomplete安装后才有用)


 



3. vim记录功能
   vim的记录功能是把用户的一系列操作记录下来,包括在命令模式和输入模式切换也记录
   下来,然后需要的时候把该记录中的所有操作回放。
   具体的操作是,命令模式下按q,接下来需要按一个小写字母,表示该记录的名字,供以
  后调用,不妨假设按了f,接下来就进入记录模式中了,用户的操作都被记录下来,直到用
  户再次按q键。那如何回放记录下来的历史操作呢?在命令模式下按@键,然后按下该记录
  的名字,如刚才的f,这样就完成了。如果需要连续回放,可以在@命令前加数字表示回放
   次数。


 


4.查看脚本位置
" 输出所有带有VIM设置的地址
:scriptnames
" 输入VIM是从哪里寻找vimrc文件的
:version
:map后面不加任何参数,则会列出当前所有的映射


 


5. 取消高亮


   :nohl


 


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


 重做:ctrl +r


 
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] 开始记录操作,记录到寄存器[a-z]中
停止记录操作
@[a-z]  执行寄存器中的操作
@@ 执行最近寄存器中记录的操作


10.正则表达式

1.替换变量
在正规表达式中使用 \( 和 \)符号括起正规表达式,即可在后面使用\1、\2等变量来访问\( 和\)中的内容。
将 AB替换
 B A
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1
将A, B替换为 B A
:%s/\(\w\+\), \(\w\+\)/\2 \1/  

给所有字母或数字加上双引号
%s/\(\w\)/"\1"/g


/字符串 向下搜索字符串
?字符串 向上搜索字符串
    分别是向下和向上搜索光标所指的词
      重复上一次搜索
:起始行,结束行s/搜索串/替换串/g 从起始行到结束行,把所有的搜索串替换为替换串
:set ignorecase 设置忽略字母大小写。可以用 :set noignorecase 取消忽略字母大小写

例如 /hello 从当前光标位置开始向下搜索 hello,不带字符串的命令 可重复上一次搜索,相当于 n。又如 :1,$s/hello/hi/g 把全文中的 hello 改为 hi,其中 表示最后一行。另外,你还可以先进入可视模式选择一段文本,按 :进入命令行并输入 s/hello/hi/g ,VIM 将在选区中进行替换操作。

搜索字符串用的是正规表达式(Regular expression),其中许多字符都有特殊含义:
      取消后面所跟字符的特殊含义。比如 \[vim\] 匹配字符串“[vim]”
[]      匹配其中之一。比如 [vim] 匹配字母“v”、“i”或者“m”,[a-zA-Z] 匹配任意字母
[^]     匹配非其中之一。比如 [^vim] 匹配除字母“v”、“i”和“m”之外的所有字符
      匹配任意字符
      匹配前一字符大于等于零遍。比如 vi*m 匹配“vm”、“vim”、“viim”……
\+      匹配前一字符大于等于一遍。比如 vi\+m 匹配“vim”、“viim”、“viiim”……
\?      匹配前一字符零遍或者一遍。比如 vi\?m 匹配“vm”或者“vim”
      匹配行首。例如 /^hello 查找出现在行首的单词 hello
      匹配行末。例如 /hello$ 查找出现在行末的单词 hello
\(\)    括住某段正规表达式
\数字   重复匹配前面某段括住的表达式。例如 \(hello\).*\1 匹配一个开始和末尾都是“hello”,中间是任意字符串的字符串

对于替换字符串,可以用“&”代表整个搜索字符串,或者用“\数字”代表搜索字符串中的某段括住的表达式。

举一个复杂的例子,把文中的所有字符串“abc……xyz”替换为“xyz……abc”可以有下列写法:
:%s/abc\(.*\)xyz/xyz\1abc/g
:%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g
其它关于正规表达式搜索替换的更详细准确的说明请看 :help pattern 



列编辑模式
多行插入字符:
ctrl-v
       大写I
      输入待插入的字符串
       ESC


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
变量的值为字符串,当在其中有空格时需要用\进行转义,同样如果想输入\也要进行转义。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值