【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
主要是寄存器操作,简直神器,
首先,说用寄存器的命令要知道,C-R (ctrl+r)
比如说用a寄存器,就要说按Ctrl+r a 这样子.
0-9 a-z (只有小写) 都是vim的寄存器,
其中,1-9 是删除寄存器,分别记录上n次删除的内容,比如,我要复制上5次删除的内容使用 "5p 就可以了,
0呢,上一次复制的内容,yy自动存入,
a-z是具名寄存器,比如yy想存入a中,就是用 "ayy 这样子.
这些寄存器是可以混用的,
比如 / 和 ? 我想搜上4次删除的内容,就可以用
/<CTRL+R>4 回车,
这样子哦,
输入/"4 只能搜"4这样的字符,这个和vim的配置相关.
希望能够帮助大家.
下面是我工作中实际用的的技巧,十分方便,里面注明的使用场景
vim技巧
查找的技巧(这个比较基本,随时可用)
- / 从当前位置向下查找
- ? 从当前位置向上查找
-
- 选中当期光标所在的 单词 然后向 下 查找
- # 选中当前光标所在的 单词 然后向 上 查找
- g* 选中光标所在的 单词 然后部分匹配向 下 查找
- g# 选中光标所在的 单词 然后部分匹配向 上 查找
- 部分匹配的意思是不区分大小写的匹配
- 场景(向上查找用于找统一文件的定义,先用m做一个标记,找到后方便跳回来,向下找用于查看这边变量的变化)
有关使用 搜索 和 C_] 进行查找时单词的区分设定
在.vimrc 文件中设定 iskeyword 比如,比较烦人的一个地方是c语言的 Struct.Member 如果使用 w * # ] 功能时,无法区分 单词Member,按照Struct.Member是一个单词进行搜索,在.vimrc文件中添加:
set iskeyword += ,$,@,%,#,.,-
一行,这样,就可以了,使用逗号分割每一个字符,结尾不能有, .
寄存器的使用
场景:比如,在A处,有两个部分需要复制框B处和C处,就可以用寄存器,在A的地方,把两个部分存入不同的寄存器,然后在去B,C处复制就好了,非常方便. 使用Ctrl + R 0 可以方便的把刚才复制的东西输入到命令栏,比如,使用
cscope进行查找的时候,向找一个函数的定义, 函数名长,怎么办呢, 使用 yw,复制函数名,然后,使用
:cs f g Ctrl_R 0 可以快速的输入函数名.
vim中a到Z是复制缓冲区,可以吧文本占时复制到缓冲区中,使用“ayy 把内容复制到a中,使用”ap 把a缓冲区中的内容取出来,要点就是使用”加在缓冲区名字的前面
主要是寄存器操作,简直神器,
首先,说用寄存器的命令要知道,C-R (ctrl+r)
比如说用a寄存器,就要说按Ctrl+r a 这样子.
0-9 a-z (只有小写) 都是vim的寄存器,
其中,1-9 是删除寄存器,分别记录上n次删除的内容,比如,我要复制上5次删除的内容使用 “5p 就可以了,
0呢,上一次复制的内容,yy自动存入,
a-z是具名寄存器,比如yy想存入a中,就是用 “ayy 这样子.
这些寄存器是可以混用的,
比如 / 和 ? 我想搜上4次删除的内容,就可以用
/<CTRL+R>4 回车,
这样子哦,
输入/”4 只能搜”4这样的字符,这个和vim的配置相关.
标记缓冲区
场景:就是跳转啊,如果能方便快速的在不同的代码位置跳转,方便的不行了啊,这个就是干着个用的,
缓冲区的范围也是a-Z,使用m[a-Z]进行标记,标记的是光标所在的位置,使用’[a-Z]会跳转到相应的位置,要点就是,使用m标记,使用’进行跳转。
搜索时忽略大小写
使用 :set ic开启忽略大小写,
使用 :set noic 关闭
ic 即 : ignore case 的简写
vim中cscope的使用
-
cscope是用于多种语言的(其实主要还是c了)的符号查找程序.这个很厉害啊,只是使用起来比ctags稍微麻烦一点.
-
在源码目录使用cscope -cb 会生成一个cscope.out文件,如果只有指定目录,就把需要的所有文件写到cscope.files文件里, 一行一个文件就行了,
-
vimrc中也许有像set tag = xxx之类的设置,笨一点的方法就是使用cs add进行加入对应文件
-
使用 :cs f g XXX 找cscope.out中的XXX定义.
f表示查找 g 表示找定义,可以使用 :cs help 进行查看,很方便.
-
对上一条中 f的展开
:cs help 会有说明
add {file|dir} [prefix dir] 添加一个cscope.out文件,可以指定文件或者目录加入cscope.out文件 ,cscope默认使用vim开启的目录开始查找,如果改了目录,使用 prefix dir重新指定一个就好了,要不然就会报某某某文件找不到.
find 查找,在加入的cscope.out文件中,按指定方式找对应的符号,g就是找定义,其他的看下一条.
kill # 从加入的cscope.out文件中除去一个.# 是序号,也可以使用文件指定,使用需要方便啊.
show 显示已经加入的scope.out文件.前面就是kill需要的序号了.
reset 初始化所有的加入的cscope.out文件.
-
有关:cs f g XXX中g的扩展
0或s 查找这个符号.
1或g 查找这个定义.
2或d 查找这个函数调用的函数们.
3或c 查找调用这个函数的函数们.
4或t 查找这个字符串.
6或e 查找这个egrep匹配模式.
7或f 查找这个文件.
8或i 查找include这个文件的文件们.
-
使用技巧.
使用手工输入函数符号的是不是很麻烦呢,可以这样,使用 yw 复制一个单词,然后使用C_r 0 从复制复制寄存器中拿出上一个复制的内容.
有关显示行号的技巧
场景对于显示行号,一般都需要的吧,对于显示相对行号,好处就是,方便的使用 [n] + j| k 进行跳转,
line('.')函数的使用场景:这个前提是在命令行使用\=表示后面的命令需要执行后的结果, 比如,想快速的给
枚举值做一个值的注释,枚举开始的地方是第12行,结束于100行 可以这样
:13,100s/$/\/\/ Value=\=line('.')-12/g
-
vim显示行号,很简单,开始显示,
-
set number 简写 set nu .
取消显示
set nonumber 简写 set nonu
显示相对行号 //对于查看结构体特别有用
set relativenumber
取消相对行号显示
set norelativenumber
-
有关line函数的使用
这个函数是得到行数,使用 :help line 可以查看许多内容.
line(‘.’) 当前行.
line(“‘t”) t标记所在的行,没有的话,返回0
作用:
-
给文件添加统一的前面 行号,是内容的序号,不是显示的.:
:%s/^/\=line('.').' '
解释: * %s 是全局搜索. * ^ 表示每一行的开头 * = 表示 使用后面的替换 * line(‘.’) 表示但前行的行号,这个号码是根据匹配游标移动改变的. * . 表示字符串连接,连接后面的’ ‘(空格) 你总不希望行号后面没有空格吧?
-
计算但前行到指定行的行差
这个比较麻烦,分一下几步:
- 在基准的行做一个标记,比如 ms 做一个s标记.
- 使用 / 或者其他什麽手段,移动到所在的行.
- 执行 :echo line(‘.’)-line(“‘s”) 就会在命令输入行打出一个数字,就是行差了,
虽然比较麻烦,可是使用q 定义好宏以后,使用@执行就好多了.
-
vim的操作命令
-
概述
这里的vim操作命令指的是按下 : 之后可以输入的命令
-
去掉所有空行
:g/^s*$/d
说明:
g : 全局命令
/ : 分割符
^s*$ : 所有匹配开头和结尾只有 空格 的行.
/d : 删除该行
vim的folder操作
-
配置
set foldenable “设置允许折叠
set foldmethod=[manual|indent|] “设置折叠方式,manul手动 indent按缩进折叠
set foldlevel=3 “设置折叠的层级大小
-
操作
在normal模式下进行fold操作
z + c 折叠光标所在的区域(一次折叠一层)
z + C 折叠光标所在的区域(一次把光标所在的区域折叠到最小)
z + R 打开所有的折叠(一次打开到没有折叠的样子)
z + r 打开所有的折叠(一次打开一层折叠,再桉一次这打开下一层)
z + o 打开光标所在的折叠,或者 在光标所在的地方 按 l 也可以
z + M 折叠所有可以折叠的代码(以最大深度进行折叠)
z + m 折叠所有可以折叠的代码(以一层的深度递增折叠,再桉一次则折叠第二层)
来源:oschina
链接:https://my.oschina.net/u/2265334/blog/1540499