共117行

Neovim执行命令攻略

2026-04-22 12:25:44

Neovim 的“执行命令”主要分为两大场景:调用外部 Shell 命令(如 lspython)和执行内部 Vim 命令(如保存、替换)。掌握这两者的组合,能让你在不离开编辑器的前提下完成大部分系统操作。

一、调用外部 Shell 命令

这是最常用的功能,让你在编辑器内直接与终端交互。

1. 基础调用(仅查看结果)

在命令模式下使用 :!<命令>,执行后按回车返回 Neovim。

:!ls -la          " 列出当前目录文件
:!python --version " 检查 Python 版本
:!git status       " 查看 Git 状态

适用场景:快速查看系统信息,不修改缓冲区内容。

2. 读取命令输出到缓冲区

将外部命令的执行结果直接插入到当前光标位置下方。

:r !date          " 插入当前日期时间
:r !curl -s http://example.com " 插入网页内容

适用场景:将命令输出作为文本内容插入文档。

3. 将文本作为命令输入(Filter)

将选中的文本“喂”给外部命令处理,并用结果替换原文本。

适用场景:格式化代码、排序列表、调用脚本处理选区文本。

4. 执行当前文件(使用 % 占位符)

% 代表当前文件名,常用于运行脚本。

:!python %        " 运行当前 Python 文件
:!node %          " 运行当前 JavaScript 文件
:!gcc % -o output && ./output " 编译并运行 C 程序

适用场景:快速测试当前编写的代码。


二、执行内部 Vim 命令

这些是编辑器自身的功能命令,用于高效编辑。

1. 文件与缓冲区操作

:w                " 保存文件
:wq / :x          " 保存并退出
:q!               " 强制退出不保存
:bn / :bp         " 切换下一个/上一个缓冲区
:ls               " 查看所有缓冲区列表

2. 文本查找与替换

/pattern          " 向前查找
?pattern          " 向后查找
:s/old/new/g      " 替换当前行所有 old
:%s/old/new/g     " 替换全文所有 old(加 c 可确认)
:g/pattern/d      " 删除所有包含 pattern 的行

三、进阶技巧与 Lua 集成

1. 组合命令(命令链)

使用 | 分隔多个命令,一次性执行。

:w | !python %    " 先保存,再运行当前脚本
:g/TODO/d | %s/old/new/g " 先删除所有 TODO 行,再全局替换

2. Lua 配置中执行命令(init.lua)

在 Neovim 的 Lua 配置文件中,使用 vim.cmd 调用 Vim 脚本命令。

-- 设置配色方案
vim.cmd("colorscheme catppuccin")

-- 保存文件(Lua 写法)
vim.cmd("w")

-- 带变量拼接命令
local file_path = "/tmp/test.lua"
vim.cmd("edit " .. file_path)

注意:Neovim 0.7+ 推荐优先使用 Lua 原生 API(如 vim.api.nvim_buf_set_lines),仅在无对应 Lua 函数时使用 vim.cmd


四、速查表(Quick Reference)

场景 命令格式 示例
运行外部命令 :!<cmd> :!ls
插入输出 :r !<cmd> :r !date
处理当前行 !!<cmd> !!sort
处理选区 Visual 模式选中后 :!<cmd> 选中代码后 :!python
运行当前文件 :!<解释器> % :!python %
Lua 调用 vim.cmd("cmd") vim.cmd("w")

最佳实践:在编写代码时,善用 :w | !python % 这种组合键(或映射成快捷键),实现“保存即运行”的流畅体验。