宏(macro)

qa - 将之后的所有键盘操作录制下来,直到再次在命令模式按下q,并存储在a中
@a - 执行刚刚记录在a里面的键盘操作
@@ - 执行上一次的macro操作

保存会话

会话代表当前的Vim状态,即你的工作环境,包括窗口、标签页等等。

:mksession ~/.mysession.vim

如果文件重复,Vim默认会报错,如果你想强行写入,可以使用mksession!:

:mksession! ~/.mysession.vim

重新打开这个会话:

vim -S ~/.mysession.vim

执行外部命令

可以在 vim 中输入 :!cmd 执行外部命令 cmd,比如:

:!python %      -  运行当前编写的python程序(%会展开为__file__)

:w !cmd 可以使用文件内容作为命令的输入:

:w !cmd         -  将整个文件作为命令的输入
:n1, n2 w !cmd  -  将文件中n1至n2行内容作为cmd的输入并执行

:r !cmd 可以执行 cmd 并把其标准输出打印的下一行,比如:

:r !date        -  把当前时间输出到文件
:r !pwd         -  输入当前路径
:r !cal         -  运行“cal”,在下一行插入日历

:% !cmd 可以执行 cmd,并以文件内容作为 cmd 的输入,以 cmd 的输出替换当前文件,比如:

:% !python -m json.tool  -  格式化当前 json 文件

这里 % 相当于选择整个文件内容,同样可以选择部分内容进行替换

在任何格式的文本中,想插入一些数据,只需要写一小段代码,然后选中这段代码,执行!python

for i in range(10, 0, -1):
    print(i)

选中代码,并输入:'<,'>!python, 以下为输出:

    10
    9
    8
    7
    6
    5
    4
    3
    2
    1

vim剪贴板(寄存器)

vim有多个剪贴板(寄存器):

  • 0~9 是历史剪贴板
  • " 为上一次剪切的内容
  • + 为系统剪贴板
  • * 为拷贝粘贴
  • / 为上一次搜索的内容
  • : 为上一次的命令
  • . 为上一次进行的操作,包括写的内容
  • = 这个寄存器比较特殊,使用它Vim会让你输入一个表达式,它返回表达式的结果(:help quote=)

当进行宏录制后,还可以看到寄存器中宏录制的内容。

:reg - 查看剪贴板内容

对任何剪贴板,可以使用以下命令进行拷贝和粘贴(+可以替换为任何剪贴板)

"+y
"+p
"+d

在插入模式下或者Ex命令模式下,使用<c-r>寄存器名 可以输入寄存器里的内容

vim参数

$ vim -b              用二进制打开
$ vim -p file1 file2  用tab页打开文件
$ vimdiff a.txt b.txt 比对文件
$ vi -t tag           如果已用ctags生成tags文件,打开后直接到tag定义

使用+可以在打开Vim后执行命令:

$ vim +number            打开并定位到底nunber行,相当与打开Vim后输入 :number
$ vim +PlugInstall +qall 打开Vim下载插件

vim帮助

  • 查找选项::help 'textwidth'
  • 查找VimL函数::help reverse()
  • 查找命令::help :echo
  • 查找不同模式下的按键映射:
    • insert::help i_^n
    • command::help c_^n
  • 查看映射::nmap <leader>

未分类

:%TOhtml - 转换为HTML文件
J - 合并下一行与当前行
gf - 打开光标处的文件(这个命令在打到#include头文件时挺好用的,当然,仅限于有路径的)
K - 在linux系统函数上用K跳转到man page查询页面查询系统函数(unix、linux),
g<c-g> 字节统计

insert模式下:

ctrl-w - 在insert模式下删除一个词
ctrl-u - 删除到行首
ctrl-[ - 实现ESC功能
ctrl-y - 重复当前光标上一行的字符
ctrl-o - 可以立即执行一个normal 命令,然后返回insert模式

底部命令栏

<c-r><c-w> - 拷贝光标下的词
<c-r><c-a> - 拷贝光标所在行

与shell切换:

<c-z>   -  挂起vim任务
jobs    -  查看任务
fg [n]  - 返回vim