vim + filename 打开文件并将光标置于最后一行 vim +n filename 打开文件并将光标置于第n行行首 vim +/pattern filename 打开文件并将光标置于匹配模式pattern的第一个串处
:f 可以查看当前文件名
:!pwd 可以查看当前目录
/\<abc\> 可以实现精确匹配
Ctrl+n/Ctrl+p 可以实现单词自动补齐
Ctrl+a/Ctrl+x 可以实现数字加1/减1
Ctrl+o/Ctrl+i 执行向后/向前跳转
gd 跳转到光标处的局部变量的定义处,并将此关键字高亮 (如果对全局变量则会跳转至所在函数对其的第一次引用处) gD 对于局部变量同'gd';对于全局变量,跳转到定义处,并将此关键字高亮 gf 打开光标处的字符串指定的文件 (会在 path中寻找 --->:set path ) ga 获取光标处字符的ASCII码(8,10,16进制) [i 快速察看光标所在位置的变量的定义 [d 快速察看光标所在位置的宏的定义 [{ 跳转到光标所在程序块的开头 ]} 跳转到光标所在程序块的结尾
Q: 如何改变分割窗口的大小 -----------------------------------------------------------
nmap w= :resize +3<CR> nmap w- :resize -3<CR> nmap w, :vertical resize -3<CR> nmap w. :vertical resize +3<CR>
Q: 搜索字符串之正则表达式 ----------------------------------------------------------- 搜索字符串用的是正规表达式(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 。
Q: 高级删除操作 ----------------------------------------------------------- (1) 删除包含/不包含指定内容的行
可以用":help g"获得g命令的详细帮助. g命令的格式为: [range]global/{pattern}/{command} global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行执行命令{command},如果希望对没匹配上的行执行命令,则使用global!或vglobal命令。
:g/pattern/d
:g!/pattern/d :v/pattern/d
PS: 如果用sed,可以执行 sed '/pattern/d' file.txt
(2) 删除DOS格式的回车^M,这里^M的输入方法是Ctrl-V Ctrl-M :%s/^M$//g
(3) 删除行尾空白
:%s= *$==
(4) 删除文件中所有的空行 :%g/^$/d :g/^/s*$/d (5) 删除文件中所有的重复行 :g/s*^$/d :g//%(^/1$/n/)/@<=/(.*/)$/d :g/^/(.*/)$/n/1$/d :%s/^(.*)n1/1$/ (本博按:删除无字符行应用:g/^$/d 删除有一些空格的行应用 :g/^/s*$/d 表示以空格开头(/s)若干个的行) :%s/<!--_.{-}-->// 删除多行注释 :%s/^.{-}pdf/new.pdf/ 只是删除第一个pdf :g!/^dd/d 删除不含字符串'dd'的行 :v/^dd/d 同上 (译释:v == g!,就是不匹配!) :g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行
Q: 批量复制/文件间复制 ----------------------------------------------------------- (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: 批量文件查找与替换 -----------------------------------------------------------
args * argdo %s/<old_word>/<new_word>/ge | update For Example: args *.c argdo %s/old/new/ge | update argdo %s/OLD/NEW/ge | update argdo %s/Old/New/ge | update args *.c argdo %s/old/new/ge | argdo %s/OLD/NEW/ge | argdo %s/Old/New/ge | update :bufdo %s/old/new/ge | %s/Old/New/ge | %s/OLD/NEW/ge | update
查找类似DP1,DP25,DP382等等的字符串,并替换成DP
%s/DP\d\+/DP/g
参考资料
1. Vim学习笔记4: Vim高级命令
2. vi使用详解
3. vim 使用技巧
4. 使用vim分割窗口时如何改变窗口的尺寸
5.vim 全局替换命令及正则表达式
