Vim Tips

Q: Vim 删除包含/不包含指定内容的行
-----------------------------------------------------------
    :g/pattern/d
    :g!/pattern/d
    :v/pattern/d
可以用":help g"获得g命令的详细帮助. g命令的格式为:
[range]global/{pattern}/{command}
global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配
到的行执行命令{command},如果希望对没匹配上的行执行命令,则使用global!或
vglobal命令。
PS: 如果用sed,可以执行 sed '/pattern/d' file.txt


Q: Vim 删除文件中所有的空行
-----------------------------------------------------------
    :g/^/s*$/d


Q: Vim 删除文件中所有的重复行   
-----------------------------------------------------------
    :g//%(^/1$/n/)/@<=/(.*/)$/d 或者 :g/^/(.*/)$/n/1$/d


Q: Vim 复制多行/批量复制/文件间复制
-----------------------------------------------------------
(1) 命令行模式下输入
  :5,10 co 12
(2) 标签
  光标移到起始行,输入ma
  光标移到结束行,输入mb
  光标移到粘贴行,输入mc
  然后 :'a,'b co 'c
  把 co 改成 m 就成剪切了
(3) 文件间
也可以把大量的代码保存到一个文件,然后在另一个文件里打开需要拷贝的代码。   
文件一:
    光标移到起始行,输入ma
    光标移到结束行,输入mb
    然后:'a, 'b w filename
文件二:
    光标移到需要赋值的行,输入:
    :r filename


Q: Vim 批量文件查找与替换
args *
argdo %s/<old_word>/<new_word>/ge | update

For Example:
args *.c
argdo %s/zen/rodimus/ge | update
argdo %s/ZEN/RODIMUS/ge | update
argdo %s/Zen/Rodimus/ge | update

args *.c
argdo %s/zen/rodimus/ge | argdo %s/ZEN/RODIMUS/ge | argdo %s/Zen/Rodimus/ge | update


Q: VIM: g开头的命令
-----------------------------------------------------------
Normal Mode下以g开头的命令:
gf       打开光标处的字符串指定的文件 (会在 path中寻找 --->:set path )
gd      跳转到光标处的局部变量的定义处,并将此关键字高亮 (如果对全局变量则会跳转至所在函数对其的第一次引用处)
gD    对于局部变量同'gd';对于全局变量,跳转到定义处,并将此关键字高亮
ga      获取光标处字符的ASCII码(8,10,16进制)
guw 将光标处的关键词改为小写
gUw   类似上面,改为大写
g~w    类似上面,大小写字母互换   (这三个命令中的w可以换为其它的范围表述 如 3j等


Q: 收集vi删除精典 删除操作
-----------------------------------------------------------
:%s/r//g 删除DOS方式的回车^M
:%s= *$== 删除行尾空白
:%s/^(.*)n1/1$/ 删除重复行
:%s/^.{-}pdf/new.pdf/ 只是删除第一个pdf
:%s/<!--_.{-}-->// 又是删除多行注释(咦?为什么要说「又」呢?)
:g/s*^$/d 删除所有空行 :这个好用有没有人用过还有其他的方法吗?
(本博按:删除无字符行应用:g/^$/d 删除有一些空格的行应用 :g/^/s*$/d 表示以空格开头(/s)若干个的行)
:g!/^dd/d 删除不含字符串'dd'的行
:v/^dd/d 同上 (译释:v == g!,就是不匹配!)
:g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行


Q: 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 。

 

Others:
-----------------------------------------------------------

用   :f           可以看文件名,  
用   :!pwd     可以看当前的详细路径。

用   :argdo    可以在打开的多个文件中批量执行命令,比如替换操作
:args *.c
:argdo %s/old/new/ge  |  update


[参考资料]

1. Vim学习笔记4: Vim高级命令

http://guoyoooping.blog.163.com/blog/static/135705183201003172232144/

转载于:https://www.cnblogs.com/bambreeze/archive/2011/02/20/2143747.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值