本篇是 Neovim 三部曲的入门篇:目标不是「配成网红配置」,而是让你在 macOS / Linux 上装好 nvim,搞清目录与模式,能打开文件、改几行、存盘、查帮助,并留下一份最小可扩展的 init.lua。实战插件见 Neovim 实战,Lua API 与自定义插件见 Neovim 精通。
和 VS Code 的关系:不是互斥。白天用 IDE、晚上用终端,或数据脚本全放终端,都合理。先把「打开 → 改 → 存 → 跑」跑通。
安装(macOS / Linux)
macOS
Homebrew 最省事:
brew install neovim
nvim --version
希望跟最新 nightly 可看 brew install --HEAD neovim,日常稳定版足够。
Linux(Debian / Ubuntu)
发行版仓库版本往往偏旧。可以用官方 AppImage、源码,或 Neovim 团队维护的 PPA / 包。示例(Ubuntu 用官方 tarball 思路):
# 用包管理器(版本因发行版而异)
sudo apt update
sudo apt install neovim
# 或下载 release 资产中的 nvim-linux64.tar.gz 解压到 ~/opt/nvim
# 再把 bin 加入 PATH
Arch:
sudo pacman -S neovim
Fedora:
sudo dnf install neovim
验证:
which nvim
nvim --version # 建议 0.9+,本教程按 0.10 心智写 Lua
可选:把 nvim 当 vim / vi
若希望 vim 命令也进 Neovim:
# 仅当前 shell 示例
alias vim=nvim
alias vi=nvim
长期可写进 ~/.zshrc / ~/.bashrc。Git 等调用 vi 时,也可设:
export EDITOR=nvim
export VISUAL=nvim
nvim vs vim:差在哪
| 点 | Vim | Neovim |
|---|---|---|
| 默认配置语言 | Vimscript | Lua(仍兼容 Vimscript) |
| 架构 | 单体 | 更模块化,内置 LSP 客户端、Treesitter 接口 |
| 默认终端 / Job | 有 | 异步 Job、内置 terminal 体验更统一 |
| 生态 | vim-plug 等 | lazy.nvim 等现代插件管理为主流 |
| 兼容 | — | 大部分 Vim 技巧可迁移,部分选项名有差异 |
一句话:手感继承 Vim,工程与扩展偏向 Neovim。 你以前会的 hjkl、ci"、宏,在 nvim 里照旧。
配置目录在哪
Neovim 遵循 XDG:
| 用途 | 路径 |
|---|---|
| 主配置 | ~/.config/nvim/init.lua(或 init.vim) |
| 模块 | ~/.config/nvim/lua/**/*.lua |
| 数据(插件安装等) | ~/.local/share/nvim/ |
| 状态 / shada | ~/.local/state/nvim/ |
| 缓存 | ~/.local/cache/nvim/ |
查实际路径:
:echo stdpath('config')
:echo stdpath('data')
最小结构建议:
~/.config/nvim/
init.lua
lua/
options.lua
keymaps.lua
init.lua 里:
require('options')
require('keymaps')
Lua 模块名对应 lua/options.lua → require('options')。
首次打开:别慌
nvim
# 或
nvim README.md
nvim src/main.py
空白缓冲时你会看到几乎空的界面。按 i 进入插入模式打字,Esc 回普通模式,:w file.txt 另存,:q 退出,:wq 保存并退出,:q! 放弃修改。
常用「救命」:
- 卡在某种模式:连按
Esc,或Ctrl-[ - 终端里显示乱:
:set termguicolors(真彩色终端) - 不会关:
:qa!强制关所有
模式(modes)心智
先掌握四个:
- Normal(普通):默认;移动、删除、复制、执行命令。按
Esc回来。 - Insert(插入):
i/a/o等进入;像普通编辑器打字。 - Visual(可视):
v字符、V行、Ctrl-v块选;再d/y/>操作。 - Command-line(命令行):
:开头,如:w、:s/old/new/g。
另有 Replace、Terminal、Operator-pending 等,入门阶段遇到再查。
记忆法:Normal 是「指挥」,Insert 是「打字」,Visual 是「圈选」,: 是「下指令」。
Buffers / Windows / Tabs
这是 Vim 系最易混的三点:
- Buffer(缓冲区):打开过的文件内容在内存中的表示。可以隐藏不显示。
- Window(窗口):屏幕上的分割视口,显示某个 buffer。
- Tab page(标签页):一组窗口布局。不是「一个文件一个 tab」的浏览器心智。
常用:
:ls " 列出 buffer
:bnext " 下一 buffer(可映射)
:bprev
:split " 水平分窗
:vsplit " 垂直分窗
Ctrl-w h/j/k/l " 在窗口间移动
:tabnew " 新标签
gt / gT " 标签间切换
建议:日常多用 buffer + 分窗,少把 tab 当浏览器标签。
基础移动与编辑
移动
| 按键 | 作用 |
|---|---|
h j k l | 左下上右 |
w / b | 下一词 / 上一词 |
0 / ^ / $ | 行首 / 第一个非空白 / 行尾 |
gg / G | 文件头 / 文件尾 |
{ / } | 上一段 / 下一段 |
% | 括号跳转 |
Ctrl-d / Ctrl-u | 半页下 / 上 |
f{c} / t{c} | 行内找字符 / 到字符前 |
编辑(操作符 + 动作)
Vim 语法:操作符 + 动作(或文本对象)。
| 示例 | 含义 |
|---|---|
dw | 删到词尾 |
d$ / D | 删到行尾 |
dd | 删整行 |
ci" | 改双引号内(change inside) |
ya( | 复制圆括号及内容 |
u / Ctrl-r | 撤销 / 重做 |
yy / p | 复制行 / 粘贴 |
. | 重复上次修改 |
文本对象:i" a" i( a[ iw aw 等,配合 c/d/y 极强。
搜索与替换
/pattern " 向下搜,n/N 下一个/上一个
?pattern " 向上搜
:s/old/new/g " 当前行
:%s/old/new/g " 全文件
:%s/old/new/gc " 全文件并确认
:help 才是第一插件
:help
:help :w
:help windows
:help lua-guide
:help options
:user-manual
在帮助缓冲里 Ctrl-] 跟随链接,Ctrl-t / Ctrl-o 返回。中文用户也可装翻译文档,但英文帮助与版本同步最好。
查选项:
:help 'clipboard'
:set clipboard?
推荐最小 init.lua
把下面存为 ~/.config/nvim/init.lua,重启 nvim。注释可按需删。
-- ~/.config/nvim/init.lua — 入门最小集
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
local o = vim.opt
o.number = true
o.relativenumber = true
o.cursorline = true
o.termguicolors = true
o.clipboard = 'unnamedplus'
o.ignorecase = true
o.smartcase = true
o.expandtab = true
o.shiftwidth = 2
o.tabstop = 2
o.undofile = true
o.splitright = true
o.splitbelow = true
o.signcolumn = 'yes'
o.scrolloff = 4
o.updatetime = 250
-- 基础键位
local map = vim.keymap.set
map('n', '<leader>w', '<cmd>write<cr>', { desc = 'Save' })
map('n', '<leader>q', '<cmd>quit<cr>', { desc = 'Quit' })
map('n', '<leader>h', '<cmd>nohlsearch<cr>', { desc = 'Clear search' })
map('n', '<C-h>', '<C-w>h')
map('n', '<C-j>', '<C-w>j')
map('n', '<C-k>', '<C-w>k')
map('n', '<C-l>', '<C-w>l')
-- 缩进在可视模式保持选区
map('v', '<', '<gv')
map('v', '>', '>gv')
-- 中文用户:偶尔需要快速切回 Esc
map('i', 'jk', '<Esc>', { desc = 'Exit insert' })
可选拆文件:把 vim.opt 段放进 lua/options.lua,键位放进 lua/keymaps.lua,init.lua 只 require。
剪贴板与终端
- macOS:一般装好即可用
unnamedplus(依赖pbcopy/pbpaste)。 - Linux:需
xclip或wl-clipboard(Wayland)。
真彩色:iTerm2 / Kitty / Windows Terminal / 现代 VTE 都支持,确保 TERM 合理(如 xterm-256color)且 termguicolors 打开。
练习清单(30 分钟)
- 用
nvim打开任意 Markdown,:w存一次。 - 练习
ci"、dd、yy/p、u。 :vsplit再Ctrl-w切换。:help lua-guide翻两节。- 改
shiftwidth,:set shiftwidth?确认。
下一步
插件、LSP、Telescope、Python 工作流 → Neovim 实战。
Lua API、autocmd、自定义插件、性能与远程 → Neovim 精通。
配置是园艺不是装修:先让植物活下来,再谈造型。
评论