get到的vim技巧,vim真是神器啊

北慕城南 提交于 2019-12-21 23:21:42

【推荐】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的使用

  1. cscope是用于多种语言的(其实主要还是c了)的符号查找程序.这个很厉害啊,只是使用起来比ctags稍微麻烦一点.

  2. 在源码目录使用cscope -cb 会生成一个cscope.out文件,如果只有指定目录,就把需要的所有文件写到cscope.files文件里, 一行一个文件就行了,

  3. vimrc中也许有像set tag = xxx之类的设置,笨一点的方法就是使用cs add进行加入对应文件

  4. 使用 :cs f g XXX 找cscope.out中的XXX定义.

    f表示查找 g 表示找定义,可以使用 :cs help 进行查看,很方便.

  5. 对上一条中 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文件.

  6. 有关:cs f g XXX中g的扩展

    0或s 查找这个符号.

    1或g 查找这个定义.

    2或d 查找这个函数调用的函数们.

    3或c 查找调用这个函数的函数们.

    4或t 查找这个字符串.

    6或e 查找这个egrep匹配模式.

    7或f 查找这个文件.

    8或i 查找include这个文件的文件们.

  7. 使用技巧.

    使用手工输入函数符号的是不是很麻烦呢,可以这样,使用 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

    作用:

    1. 给文件添加统一的前面 行号,是内容的序号,不是显示的.:

      :%s/^/\=line('.').' '

      解释: * %s 是全局搜索. * ^ 表示每一行的开头 * = 表示 使用后面的替换 * line(‘.’) 表示但前行的行号,这个号码是根据匹配游标移动改变的. * . 表示字符串连接,连接后面的’ ‘(空格) 你总不希望行号后面没有空格吧?

    2. 计算但前行到指定行的行差

      这个比较麻烦,分一下几步:

      1. 在基准的行做一个标记,比如 ms 做一个s标记.
      2. 使用 / 或者其他什麽手段,移动到所在的行.
      3. 执行 :echo line(‘.’)-line(“‘s”) 就会在命令输入行打出一个数字,就是行差了,

      虽然比较麻烦,可是使用q 定义好宏以后,使用@执行就好多了.

vim的操作命令

  1. 概述

    这里的vim操作命令指的是按下 : 之后可以输入的命令

  2. 去掉所有空行

    :g/^s*$/d

    说明:

    g : 全局命令

    / : 分割符

    ^s*$ : 所有匹配开头和结尾只有 空格 的行.

    /d

    : 删除该行

vim的folder操作

  1. 配置

    set foldenable “设置允许折叠

    set foldmethod=[manual|indent|] “设置折叠方式,manul手动 indent按缩进折叠

    set foldlevel=3 “设置折叠的层级大小

  2. 操作

    在normal模式下进行fold操作

    z + c 折叠光标所在的区域(一次折叠一层)

    z + C 折叠光标所在的区域(一次把光标所在的区域折叠到最小)

    z + R 打开所有的折叠(一次打开到没有折叠的样子)

    z + r 打开所有的折叠(一次打开一层折叠,再桉一次这打开下一层)

    z + o 打开光标所在的折叠,或者 在光标所在的地方 按 l 也可以

    z + M 折叠所有可以折叠的代码(以最大深度进行折叠)

    z + m 折叠所有可以折叠的代码(以一层的深度递增折叠,再桉一次则折叠第二层)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!