Learning Vim

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 全局替换命令及正则表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值