2012年3月8日星期四

VIM的高级使用

 
 

Sent to you by satan via Google Reader:

 
 

VIM的高级使用

via 博客园-iTech's Blog by iTech on 2/21/12


1)一些常用的Vim配置,在~/.vimrc中
syntax on       支持语法高亮
set nu          显示行号
set nonu      不显示行号
set ai          设置自动缩进
set shiftwidth=4   设置自动缩进 4 个空格, 当然要设自动缩进先.
set sts=4          即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
set tabstop=4      实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
set expandtab      在输入 tab 后, vim 用恰当的空格来填充这个 tab.
:set hls 打开搜索高亮

:set nohls 取消搜索高亮 

2)多文件编辑
:e filename  vim将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.
:sp filename vim将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.
ctrl+w w来在vim打开的多个窗口中切换.
ctrl+w q来关闭多个窗口中当前的窗口.

3) 查找
/xxx(?xxx) 表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找.查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找.
*(#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方向查找.
g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而是匹配包含该单词的所有字符串.
% 本命令查找与光标所在处相匹配的反括号, 包括 () [] { }.

4) 光标移动
w(e) 移动光标到下一个单词. b 移动光标到上一个单词.
0 移动光标到本行最开头. ^ 移动光标到本行最开头的字符处. $ 移动光标到本行结尾处.

向前向后翻页 ctrl+f 和 ctrl+b. 

 
5)拷贝, 删除与粘贴
在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令结合的, 看几个例子就能够明白了.
yw 表示拷贝从当前光标到光标所在单词结尾的内容. dw 表示删除从当前光标到光标所在单词结尾的内容. y0 表示拷贝从当前光标到光标所在行首的内容. d0 表示删除从当前光标到光标所在行首的内容. y$ 表示拷贝从当前光标到光标所在行尾的内容. d$ 表示删除从当前光标到光标所在行尾的内容. yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容. dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容.
特殊地: yy 表示拷贝光标所在行. dd 表示删除光标所在行. D 表示删除从当前光标到光标所在行尾的内容.

u 撤销上次的操作,ctrl+r恢复上次的撤销。 

6)替换
单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S.
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

:2,50s/part1/part2      #用part2替换第2行到第50行中每行第1个part1
:2,50s/part1/part2/g    #用part2替换第2行到第50行中所有的part1
:.,+3s/part1/part2      #用part2替换当前行以及当前行后面的三行中每行第1个part1

:.,+3s/part1/part2/g    #用part2替换当前行以及当前行后面的三行中所有的part1 

例如将每行增加 xxx : :%s/\(.*\)/\1 xxx/g 

完! 

本文链接


 
 

Things you can do from here:

 
 

没有评论:

发表评论