Vim 进阶1

Vim 进阶1

所有你觉得简单重复,可以自动化实现的操作,都是可以自动化实现的。

Vim光标移动拾遗

w:下一个单词的开头,e:下一个单词的结尾,b:上一个单词的开头,

0:行首(最行首,不管行首字符是否为空),$:行尾,^:非空字符行首,

%:匹配括号处,前跳后,后跳前都可,

gd:跳到某变量定义处(其实是当前函数体内,该变量第一次出现的位置),gD:整个文件内该变量第一次出现的位置,*#nN

[{:移动到前一个没有匹配的左大括号处,(用于跳到函数、循环等作用域的开头)

r:normal 模式下替换一个字符,如 ra 将当前字符替换为 a,R:normal模式下从当前到行尾替换

cw:删除单词并进入编辑模式,C:输出到行尾并进入编辑模式。S:删除整行并进入编辑模式,s:删除当前字符并进入编辑模式,

~:替换大小写,并后移一个字符

自定义计数操作

  • d2w:删除(其实d都是剪切)两个单词

  • 2dw:删除单词,做两遍。4dd == d3j

Vim 修饰词

  • i inner

    dip:(delete inner paragraph) 删除一段文字(空行分隔),删除操作不包括空行

    di(:删除括号内内容

  • a around

    dap:删除一段文字,删除操作包括空行

  • t till

    dt):删除从当前光标到本行下一个 ) 处,删除操作不包括 )

  • f find

    df):删除从当前光标到本行下一个 ) 处,删除操作包括 )

vim mark标签

  • m 生成一个 mark 标签,如 a ,生成一个名为 a 的标签
  • ` 跳转到一个 mark 标签,如 a ,跳转到名为 a 的标签处,恢复行列位置
  • ’ 跳转到一个 mark 标签,如 a ,跳转到名为 a 的标签处,仅恢复行位置,即跳到标签所在行行首
  • `` 或 ‘’ 在起跳点和标签 a 间反复横跳

mark 还有很多用法,可参考 https://vimjc.com/vim-mark.html

vim多标签页

对于vim这个来说, 单纯的用多子窗口(spvsp)来操作, 感觉还是不够的, 还要结合标签页tab pages来,才能更好的操作。

所有关于标签的命令都是以 :tab 开始的, 可以用tab键来查看提示

  • :tabnew 新建标签

  • :tabedit fileName 在新标签中打开文件,简写为 :tabe

  • :tabc 关闭当前标签, :tabo 关闭其他所有标签

  • :tabfirst 切换到第一个标签

  • :tablast 切换到最后一个标签

  • :tabp 切换到前一个标签 tab previous

  • :tabn 切换到下一个标签 tab next

  • :tabs 查看标签

  • gtgT 常规模式下直接切换标签

visual模式

  • v:逐字符选中
  • V:整行选中
  • C-v:矩形块 block 选中

搜索替换

:[range]s/from/to[flags]:在 range 范围内,将 from 替换为 to。 range、flags 常用含义如下

flags

flag作用
%复制上次替换命令的flags
g替换每行所有的匹配值(默认只替换每行的第一个匹配值)
c替换前需确认
e替换失败时不报错
i / I大小写不敏感 / 敏感

range

range功能
2121行
$最后一行
%全部行
21,25从21行到25行
.当前行
.+3当前行后的第3行
.,$当前行到最后一行
.,.5 / .,.+5当前行及之后5行

多个文件内替换

:args *.c *.h
:argdo %s/ext4/ext5/g 
:argdo update 
:argdo exit

注意 Vim 中的替换与 sed 中的替换其实是很像的:

sed -i "[range]s/from/to/[flags]" filename 将⽂件 filename 内的 from 替换为 to

-i 表示直接编辑文件内容,不加将会打印输出到 stdout。

Vim 宏

如生成从 1 到 1000 的序列等多次雷同的操作

  • 录制宏:q,如 qa 表示开始录制名称为 a 的宏。
  • 运行宏:@,如 @a 表示执行名称为 a 的宏,10@a 表示执行 10 次。

详见:Vim 重复操作的宏录制

安装插件

  • mkdir -p ~/.vim/pack/vendor/start
  • 将插件 clone 到该目录下即可

ctags

生成 tags 方便跳转看代码,支持多种语言

  • 安装 ctags:sudo apt install exuberant-ctags
  • 创建 tags 文件 ctags -R .
  • 若查找 inode_operations 的定义
    • No tags file
      • 当前目录不存在 tags 文件
      • 在父目录中寻找 tags 文件:在 .vimrc 中添加 set tags=./tags;,tags
  • 使用:
    • 查找当前文件中的某个变量的定义:光标在该变量上,Crtl+]
    • 列出所有某个变量的定义及引用:g]
    • 直接打开定义 inode_operations 的文件:直接在当前目录下,命令行中 vim -t inode_operations

shell使用vim键位

  • bash : set -o vi

  • zsh : bindkey -v

  • fish : fish_vi_key_bindings

这里说一下 bash 中默认是 emacs 模式,具体当前是什么模式可以用 set -o 命令查看,然后通过 set -o enacsset -o vi 来回切换。

键位图中文版

在这里插入图片描述

其他常用插件

  • gitgutter
  • easymotion
  • fzf
  • Vim-linux-coding-style
  • cscope

Ref:

https://www.bilibili.com/video/BV1PL411M7bg?from=search&seid=12655157522675339145&spm_id_from=333.337.0.0

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值