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/