Vim
约 2198 字大约 7 分钟
vim
2024-09-04
1. 安装 NeoVim
For x86_64:
curl -LO <https://github.com/neovim/neovim/releases/download/nightly/nvim-macos-x86_64.tar.gz>
tar xzf nvim-macos-x86_64.tar.gz
./nvim-macos-x86_64/bin/nvimFor arm64:
curl -LO <https://github.com/neovim/neovim/releases/download/nightly/nvim-macos-arm64.tar.gz>
tar xzf nvim-macos-arm64.tar.gz
./nvim-macos-arm64/bin/nvimHomebrew on macOS or Linux
brew install neovim2. 安装 LazyVim
Install the LazyVim Starter
# required
mv ~/.config/nvim{,.bak}
# optional but recommended
mv ~/.local/share/nvim{,.bak}
mv ~/.local/state/nvim{,.bak}
mv ~/.cache/nvim{,.bak}
# Clone the starter
git clone https://github.com/LazyVim/starter ~/.config/nvim
# Remove the .git folder, so you can add it to your own repo later
rm -rf ~/.config/nvim/.git
# Start Neovim! (会空白页,需要加载一段时间)
nvimRefer to the comments in the files on how to customize LazyVim.
3. 快捷键
移动光标和翻页(Navigation)
这一部分的符号也被称为导航符(Navigation)可以和后面指令相结合使用。
| Mode | Shortcut | Description |
|---|---|---|
n , v | h , j , k , l | 左,下,上,右 |
n , v | <Ctrl>+y | 光标不动,上移一行 |
n , v | <Ctrl>+e | 光标不动,下移一行 |
n , v | <Ctrl>+u | 上翻半页(up) |
n , v | <Ctrl>+d | 下翻半页(down) |
n , v | <Ctrl>+f | 上翻一页(forward) |
n , v | <Ctrl>+b | 下翻一页(backwards) |
n , v | w (小写) | 跳到下一个词首,按标点和单词分割 |
n , v | W(大写) | 跳到下一个词首,按空格分割 |
n , v | e | 跳到下一个词尾,按标点和单词分割 |
n , v | E | 跳到下一个词尾,按空格分割 |
n , v | b | 跳到上一个词首,按标点和单词分割 |
n , v | B | 跳到上一个词首,按空格分割 |
n , v | 0 (数字零) | 跳到行首第0个字符 |
n , v | ^ | 跳到行首的非空字符 |
n , v | $ | 跳到行尾 |
n , v | { | 跳到上一个段落,按空行分隔 |
n , v | } | 跳到下一个段落,按空行分隔 |
n , v | gg | 跳到文首 |
n , v | G | 跳到文尾 |
n , v | [5]gg / [5]G | 跳到第5行,数字+gg可以跳到对应的行 |
n , v | gd | 跳到当前光标所在的变量声明处 |
n , v | f[x] | 在当前行中找到x字符,找到了就跳转;安装flash插件后可以向下搜索单词,并且可以按搜索时出现最后的字母快捷跳转(find) |
n , v | s[word] | 安装flash插件后可以在当前页搜索单词,并且可以按搜索时出现最后的字母快捷跳转(search) |
n , v | ; | 重复上一个f命令而不用输入fx |
n , v | * | 查找当前光标所在的单词,向下查找 |
n , v | # | 查找当前光标所在的单词,向上查找 |
剪切、复制、粘贴
vim中的删除会把被删除的内容置入剪切板,使用Visual Mode选择目标后粘贴会把覆盖的内容加入剪切板,因此复制粘贴变得不是很方便。
| Mode | Shortcut | Description |
|---|---|---|
n | dd | 删除光标所在行 |
n | dw | 删除单词,从光标位置到词尾 |
n | diw | 删除当前光标位置所在单词 |
n | d$ | 删除到行末 |
n | d+[Navigation] | 删除到navigation的位置 |
n | x (小写) | 删除当前字符 |
n | X (大写) | 删除前一个字符 |
n | yy | 复制所在行 |
n | yw | 复制单词,从光标位置到词尾 |
n | yiw | 复制当前光标位置所在单词 |
n | y$ | 复制到行末 |
n | y+[Navigation] | 复制到navigation的位置 |
n | p (小写) | 粘贴粘贴板的内容到当前行的下面 |
n | P (大写) | 粘贴粘贴板的内容到当前行的上面 |
n , i , v | <Ctrl>+c | 复制选中的内容(LazyVim中默认设置好了,在普通的neovim中需要自己设置) |
n , i , v | <Ctrl>+v | 粘贴内容到选中位置并替换(LazyVim中默认设置好了,在普通的neovim中需要自己设置) |
Insert Mode
Insert Mode,可以称作输入模式,插入模式或键入模式。
这个部分收录的是不影响文本进入Insert Mode的快捷键
| Mode | Shortcut | Description |
|---|---|---|
n | i | 从当前光标处进入Insert Mode |
n | I | 从当前光标所在行的行首进入Insert Mode |
n | a | 从当前光标之后进入Insert Mode |
n | A | 从当前光标所在行的行末进入Insert Mode |
n | o | 在当前行之下新加一行,并进入Insert Mode |
n | O | 在当前行之上新加一行,并进入Insert Mode |
n | <ESC> 、 jk | 退出Insert Mode, jk 是需要在keymaps.lua里设置的,需要去把 Insert Mode的 <ESC 映射到 jk |
编辑相关
这个部分收录了在Normal Mode下,能对文本内容进行编辑的快捷键和一些实用的命令。
| Mode | Shortcut | Description |
|---|---|---|
n | J | 将下一行和当前行连接为一行 |
n | cc | 删除当前行并进入Insert Mode |
n | cw | 删除当前光标到词尾并进入Insert Mode |
n | ciw | 删除当前光标所在的词并进入Insert Mode |
n | c$ | 删除当前光标到行末并进入Insert Mode |
n | c+[Navigation] | 删除到navigation的位置的内容并进入Insert Mode |
n | u | 撤销 |
n | <Ctrl>+r | 重做 |
n | ~ | 切换大小写 |
n | >> | 向右缩进一个单位 |
n | << | 向左缩进一个单位 |
n | gcc | 注释光标所在的行 |
n | <leader>ch | 取消高亮,一般适用于在搜索的时候。个人偏好,需要去keymaps.lua里设置(clear highlight) |
编辑中常用的指令:
| Mode | Shortcut | Description |
|---|---|---|
c | :set wrap | 开启自动折行 |
c | :set nowrap | 关闭自动折行 |
c | :set nu | 显示行号 |
c | :set nohl | 取消高亮,一般适用于在搜索的时候 |
查找替换
| Mode | Shortcut | Description |
|---|---|---|
n | /pattern | 向后搜索字符串pattern(在LazyVim里是全局搜索) |
n | ?pattern | 向前搜索字符串pattern(在LazyVim里是全局搜索) |
n | n | 下一个匹配 |
n | N | 上一个匹配 |
c | :%s/old/new/g | 搜索整个文件,将所有的old替换为new,old和new是可更改的参数 |
c | :%s/old/new/gc | 搜索整个文件,将所有的old替换为new,old和new是可更改的参数,每次都要你确认是否替换 |
n | <leader>cr | 在整个文件中重命名光标所在的变量及其引用 |
保存和退出编辑器
| Mode | Shortcut | Description |
|---|---|---|
c | :w | 保存修改(write) |
c | :wa | 保存全部修改(write all) |
c | :wq , :x | 保存修改并退出(write and quit) |
c | :wqa | 保存全部修改并退出全部window(write and quit all) |
c | :q | 退出,如果没保存则不能退(quit) |
c | :q! | 强制退出,放弃修改 |
c | :qa! | 强制退出全部window,放弃修改 |
tab、window、buffer操作(三种窗口)
LazyVim里面有tab,window,buffer三个容器。window比buffer大,一个window可能包含多个buffer,而tab则比window大。
注:leader键LazyVim默认设置为空格键。
| Mode | Shortcut | Description | |
|---|---|---|---|
n | <leader>bd | 关闭当前buffer | |
n | <leader>bD | 强制关闭当前buffer | |
n | <leader>sv | 在右方创建新window,个人偏好,需要自己去keymaps.lua里设置 | |
n | <leader>sx | 关闭当前window,个人偏好,需要自己去keymaps.lua里设置 | |
n | <leader>- | 在下方创建新window(LazyVim) | |
n | ` | ` | 在右方创建新window(LazyVim) |
n | H | 跳转到左侧的buffer(或者说前一个buffer) | |
n | L | 跳转到右侧的buffer(或者说后一个buffer) | |
n | <Ctrl>+h | 跳转到左侧的window | |
n | <Ctrl>+l | 跳转到右侧的window | |
n | <Ctrl>+j | 跳转到下方的window | |
n | <Ctrl>+k | 跳转到上方的window | |
n | <leader>+e | 打开文件管理window(该功能由nvim-tree等相关插件提供) | |
c | :close | 关闭当前window | |
c | :tabedit file | 在新标签中打开文件file | |
c | :tab split file | 在新标签中打开文件file | |
c | :tabp | 切换到上一个tab | |
c | :tabn | 切换到下一个tab | |
c | :tabc | 关闭当前tab | |
c | :tabo | 关闭其他tab | |
n | gt | 切换到上一个tab | |
n | gT | 切换到下一个tab | |
n | 0gt | 切换到第一个tab | |
n | [5]gt | 切换到第5个tab,输入数字切换 | |
n | <Ctrl>+/ | 打开和隐藏终端(Root Dir) |
按 <leader>e 进入文件管理window,在文件管理window下的快捷键:
| Mode | Shortcut | Description |
|---|---|---|
n | a | 创建新文件 |
n | d | 删除文件 |
n | r | 重命名文件 |
n | <Enter> | 打开文件,以buffer的形式 |
Visual Mode
Visual Mode称之为视觉模式或选择模式都可。其Navigation在一中有介绍。在这一节之前,所有小写v同时表示字符视觉模式和行视觉模式。
| Mode | Shortcut | Description |
|---|---|---|
n , V | v (小写) | 进入字符视觉模式 |
n , v | V (大写) | 进入行视觉模式(一行一行选中) |
n | viw (小写) | 选中光标所在的词 |
v/V | > , < | 向右缩进,向左缩进 |
v/V | iw | 选中光标所在的词 |
v/V | d | 剪切选中的内容 |
v/V | y | 复制选中的内容 |
v/V | p | 粘贴剪切板的内容到选中的区域,并把原本选中的内容置入剪切板 |
v/V | <ESC> , v/V | 退出视觉模式 |
