vim

跳转

Posted by Dingding on October 3, 2017

基本

  • h j k l : 移动
  • i,a,o,I,A,O :插入
  • x,c,d,y,v,gu,gU,C,D:命令

  • ^ : 行首’
  • $ : 行尾
  • G : 末行
  • gg : 首行
  • nG : n行
  • ngg : n行
  • 0 : 行首

可视模式

  • v:单选
  • V:行选
  • ctrl-v:列选
  • gv:上次选中

窗口

  • H : 当前窗口的首行
  • M : 当前窗口的中间
  • L : 当前窗口的尾行
  • ctrl-b : 等效于pgup,b-backword
  • ctrl-f : 等效于pgdn,f-forward
  • ctrl-u : 上翻半页
  • ctrl-d : 下翻半页

单词/句/段落

  • w : 下一个单词词首
  • e : 下一个单词词尾
  • b : 前一个单词的词首
  • ge : 前一个单词的词尾
  • t : 到下一个字符前
  • f : 到下一个字符
  • T : 到前一个字符前
  • F : 到前一个字符

跳转

  • ctrl-o : 视图前进
  • ctrl-i : 视图后退
  • % 跳转到相配对的括号
  • [[ 跳转至上一个函数(要求代码块中 { 必须单独占一行)
  • ]] 跳转至下一个函数(要求代码块中 { 必须单独占一行)
  • ) : 下一句
  • ( : 上一句
  • } : 下一段
  • } : 上一段
  • zz: 将当前行移动到屏幕中央。
  • zt: 将当前行移动到屏幕顶端。
  • zb: 将当前行移动到屏幕底端。

替换

  • :s/old/new 把当前行old的第一次出现修改为new
  • :s/old/new/g 把当前行old的每次出现改为new
  • :nu1,nu2 s/old/new/g 替换指定行nu1,nu2之间的内容
  • :%s/old/new/g 替换全文
  • :s/old/new/gc 每一处替换都会提醒confirm
  • :g/pattern/s/old/new/g 利用正则进行全文替换
  • :g/pattern/cmd 在搜索到的行上执行cmd命令

缩进对齐

  • >> :增加缩进
  • «  :减小缩进
  • n» :以下n行增加缩进
  • n« :以下n行减小缩进
  • = :对齐

常识

  • ctrl-s 意阻止向终端输出,误按此键会使vim进入假死状态
  • ctrl-q 意恢复向终端输出,可解除上述假死状态
  • .:重复上一个编辑动作

外部命令

  • :%!grep -oP “pattern”
  • :1,12!sort -r -n -k4.1,5
  • :%!uniq

搜索替换

  • 全文搜索:/pattern
  • fc: 把光标移到同一行的下一个c字符处
  • Fc: 把光标移到同一行的上一个c字符处
  • tc: 把光标移到同一行的下一个c字符前
  • Tc: 把光标移到同一行的上一个c字符后
  • ;: 配合 f/t 使用,重复一次
  • ,: 配合 f/t 使用,反向重复一次
  • 替换:%s/old/new/gc
  • n:重复上次动作,向下
  • N:重复上次动作,向上

大小写

  • ~ :大小写翻转
  • gu/gU :改变大小写
  • u/U :可视模式改变大小写

窗口

  • split :水平切分
  • vsplit :垂直切分
  • Ctrl+w+方向键 :切换到前/下/上/后一个窗格
  • Ctrl+w+h/j/k/l :切换到前/下/上/后一个窗格
  • Ctrl+ww :依次向后切换到下一个窗格中

文件

  • bn:下一个文件
  • bp:上一个文件

标记操作

  • 模式一:分两步,先标记(/s),再在标记行上操作(:g//operate)
  • 模式二:两步一起做(:g/pattern/operate)

  • qaq: 清空寄存器a
  • g//yank A :将上次选中追加到a寄存器(小a是覆盖)
  • g//t$:将上次选中的内容直接复制到文本结尾
  • normal @a :执行寄存器a中命令

操作缓冲区的Ex命令

  • :[range]delete [x]
  • :[range]yank [x]
  • :[range]put [x]
  • :[range]copy {address}
  • :[range]move {address}
  • :[range]join
  • :[range]normal {commands}

标记

  • `` :上次跳转动作前的位置
  • `. :上次修改过的位置
  • `^ :上次插入过的位置
  • `[ :上次修改或复制的开始位置
  • `] :上次修改或复制的结束位置
  • `< :上次高亮选区的开始位置
  • `> :上次高亮选区的结束位置
  • m(a~z) :创建局部标记
  • m(A~Z) :创建全局标记
  • `(a~z,A~Z) :标记跳转

插入模式

  • < ctrl-u >
  • < ctrl-h >
  • < ctrl-w >

正则

  • \v :very magic 任何元字符都不用加反斜杠
  • \V : very nomagic 任何元字符都必须加反斜杠

环视

  • \@= 顺序环视: eg:查找后面是cat的字符small /smallcat\@=
  • \@! 顺序否定环视 eg:查找后面不是cat的字符small smallcat\@!
  • \@<= 逆序环视 eg:查找前面是small的cat small\@<=cat
  • \@<! 逆序否定环视   eg:查找前面不是small的cat small\@<!cat

g命令

  • *(#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的 下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方 向查找.
  • g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而 是匹配包含该单词的所有字符串.
  • gd 本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非 注释段中第一次出现这个单词的地方. 用于查找局部变量等
  • ga 显示光标所指字符的encoding 编码,比如ASCII码
  • guw 光标所在单词光标后的字符小写
  • gUw 光标所在单词光标后的字符大写
  • g; 反向遍历改变列表changelist, 如跳到上次文档修改的地方
  • g, 正向遍历改变列表changelist
  • gi 回到上次退出插入模式的地方,并切换到插入模式

折叠

  • zf – 创建折叠的命令,可以在一个可视区域上使用该命令;
  • zd – 删除当前行的折叠;
  • zD – 删除当前行的折叠;
  • zfap – 折叠光标所在的段;
  • zo – 打开折叠的文本;
  • zc – 收起折叠;
  • za – 打开/关闭当前折叠;
  • zr – 打开嵌套的折行;
  • zm – 收起嵌套的折行;
  • zR (zO) – 打开所有折行;
  • zM (zC) – 收起所有折行;
  • zj – 跳到下一个折叠处;
  • zk – 跳到上一个折叠处;
  • zi – enable/disable fold;

vscode 补充

  • gd – 定义跳转
  • gh – 提示框
  • gb – @TODO
  • gq – @TODO
  • gc – @TODO
  • gC – @TODO af:这个在可视模式下使用

ii ai aI

  • ii
  • ai
  • aI

vim-surround

  • ds:delete
  • cs:change
  • ys:这个太复杂,用处不大
  • S:这个在可视模式下添加,