vim小技巧

快速插入时间

把下面行追加到 ~/.vimrc ,在vim的插入模式输入 xtime 即可

1
iab xtime <c-r>=strftime("%Y-%m-%d %H:%M:%S")<cr>

复制/剪切/删除

print("Hi, this is a 'word'!")

  • 拷贝word:光标移到oyiw(举一反三:viw,diw,ciw)或者yi'
  • 拷贝'word':光标移到oya'(举一反三:va',da',ca')
  • 拷贝Hi, this is a 'word'!:光标移到oyi"(举一反三:vi",di",ci")
  • 拷贝"Hi, this is a 'word'!":光标移到oya"(举一反三:va",da",ca")

vim寄存器

查看vim常用寄存器的保存的内容:registers

a-z每个字母对应一个寄存器,查看寄存器a对应的值:reg a,查看寄存器b对应的值:reg a

normal模式下粘贴寄存器a的内容"ap,insert模式下粘贴寄存器a的内容Ctrl+r a

print("Hi, this is a 'word'!")

  • 拷贝word寄存器a:光标移到o,"a(选择寄存器a),yiw(拷贝单词)
  • 拷贝this寄存器b:光标移到h,"b(选择寄存器b),yiw(拷贝单词)
  • 查看寄存器a保存的内容::reg a
  • 查看寄存器b保存的内容::reg b
  • 粘贴word(即寄存器a的内容):光标移到粘贴位置,"a(选择寄存器a),p(粘贴)
  • 粘贴this(即寄存器b的内容):光标移到粘贴位置,"b(选择寄存器b),p(粘贴)

当我们不选择寄存器直接使用yd操作时,被操作的内容会被拷贝或者剪切到""(无名寄存器)中

"%:内容是当前文件名,一般写文件注释头会用到

".:上次插入的文本

"+:系统剪切板,查看vim是否支持使用系统剪切板:echo has('clipboard'),输出1表示支持

  • 在别的程序(如浏览器网页)用鼠标选择内容,Ctrl+c(拷贝内容到系统剪切板),回到vim用"+(选择系统剪切板),p(粘贴系统剪切板的内容)
  • "+(选择系统剪切板),yy(拷贝一行进入系统剪切板),可以在别的编辑器或者程序(如浏览器搜索框)里用Ctrl+v粘贴
  • vim拷贝默认放入""(无名寄存器),如果想用"+(系统剪切板)取代""(无名寄存器),需要:set clipboard^=unnamed,unnamedplus

粘贴网上拷贝的代码出现缩进对齐错乱

当vim :set autoindent 之后,在insert模式下用Ctrl+Shift+v粘贴网上拷贝的代码会出现缩进对齐错乱

  • 方法1. :set paste,i(进入插入模式),Ctrl+Shift+v(粘贴),:set nopaste
  • 方法2. "+(选择系统剪切板),p(粘贴)
  • 方法3. :set clipboard^=unnamed,unnamedplus(使用系统剪切板取代无名寄存器),p(粘贴)