数码知识屋
霓虹主题四 · 更硬核的阅读氛围

vim里临时执行命令的几种实用方式

发布时间:2026-02-10 13:50:30 阅读:2 次

写代码时卡在某个函数逻辑里,想快速算个 2 的 10 次方是多少?或者刚改完一段配置,想立刻用 grep 看看有没有漏掉的注释?不用退出 vim,也不用切到终端——vim 自带的临时命令执行机制就能搞定。

用 ! 执行外部命令

最常用的就是在普通模式下输入 !,后面跟上 shell 命令。比如:

!date

按下回车后,vim 会暂停当前编辑,运行 date,把结果原样输出到当前光标位置下方(不替换原有内容)。如果想把命令结果插入到当前行开头,可以先按 I 进入插入模式,再输入 !!date<Enter>(注意两个感叹号)。

对选中内容执行命令

vV 选中几行文本后,直接输入 !sort,就能对选中区域按字母排序;输入 !wc -l,就能统计选中行数。这个技巧特别适合处理日志片段或临时数据列表。

:! 和 :r! 的区别

:!ls -la 是在命令行模式下调用外部命令,执行完后回到 vim,屏幕底部显示命令输出(不插入文档);而 :r!ls -la 则会把命令输出“读入”到当前光标位置,作为新行插入。比如在写部署脚本前,想把本地 node_modules 的目录结构贴进去,直接 :r!find node_modules -maxdepth 2 -type d | head -10 就行。

用 :terminal 快速开个终端

Vim 8.0+ 或 Neovim 用户可以直接输入 :terminal,vim 窗口底部就会弹出一个内嵌终端。在这里敲 curl ipinfo.ionpm test 都没问题,按 <C-w><C-w> 可以在终端和编辑区之间切换,:q 关闭终端窗口。

小技巧:绑定快捷键

嫌每次输 :r!date 太长?可以在 ~/.vimrc 里加一行:

nnoremap <leader>d :r!date +'%Y-%m-%d %H:%M:%S'<CR>

之后只要按 ,d(假设 leader 键是逗号),当前时间就自动插进来了。

这些操作不依赖插件,原生 vim 就支持,手熟了比反复 alt+tab 切窗口快得多。