Vim:初学者指南

2025-06-04

Vim:初学者指南

Vim 自 1991 年发布以来,一直是文本编辑器之战中历史最悠久的参与者之一。它曾是许多人的朋友,也曾是许多人的敌人。想知道它会给你带来什么吗?那就来试试吧!

我已经使用 Vim 大约一个半月了,我非常喜欢它(虽然第一周有点痛苦)。

在本文中,我将讨论为什么使用 Vim、如何设置它以及 Vim 的一些基础知识。

为什么要使用 Vim?

现在,别跟我争论,我不是在拿 Vim 和任何其他文本编辑器比较。我只是在告诉你 Vim 能提供什么。

  • 完全可定制- 这意味着您拥有完全的控制权,有些人甚至使它看起来像 vscode(但我个人喜欢保持最小)
  • 生产力——一开始,你的生产力会下降,但随着你开始习惯 Vim 和它的按键绑定,它肯定会提高
  • 键盘驱动(如果您设置了首选项,则可以使用鼠标) - 这对您可能是好事,也可能不是好事
  • 看起来很酷

Neovim

如果你没听说过 Neovim,也别担心,它没什么可怕的。Neovim 只是 Vim 的一个实现,但更专注于扩展和插件,可定制性比 Vim 稍差一些。人们通常不会说他们使用 Neovim,只是称之为 Vim。这其实没什么区别,只是 Neovim 对插件的支持更多而已。此外,两者的默认按键绑定和命令相同,所以,如果你学习了 Neovim 的按键绑定,你也可以使用 Vim。

安装

Mac 和 Linux

对于 Mac 和 Linux 机器,根据您的包管理器执行以下操作之一:

sudo apt install neovim
Enter fullscreen mode Exit fullscreen mode

或者

brew install neovim
Enter fullscreen mode Exit fullscreen mode

大多数 Linux 机器默认安装有 Vim(不是 Neovim)。你可以输入vi或来运行它vim

以防万一,您现在打开它却不知道按键绑定,现在感到惊慌失措,只需输入:q!并按回车键退出。

视窗

对于 Windows 用户,您有两个选择:

  1. 您可以使用 wsl(适用于 Linux 的 Windows 子系统),并按照与 Linux 系统相同的步骤操作。这里就不详细介绍如何安装 wsl 了。
  2. 使用 Powershell(不是 Windows Powershell),您可以从 Microsoft 商店下载它,然后使用 scoop(Windows 的包管理器)安装 Neovim:

要安装 scoop,请在终端中输入以下内容:

winget install scoop
Enter fullscreen mode Exit fullscreen mode

winget 是另一个目前预装在 Windows 中的软件包管理器。

scoop install neovim
Enter fullscreen mode Exit fullscreen mode

如果它告诉您安装其他的buckets,也请这样做。

关闭并重新打开终端,您可以通过输入来打开 Neovim nvim

以防万一,您现在打开它却不知道按键绑定,现在感到惊慌失措,只需输入:q!并按回车键退出。

首次亮相

现在看起来是这样的:

现在看起来不太好,不是吗?

让我们配置它!

配置

现在有很多不错的预配置 neovim 设置,比如NvChadAstroNvim,但我建议你至少先尝试一下你自己的配置。我个人不使用预配置的,我更喜欢使用我自己的配置。

您必须首先为 neovim 创建一个配置文件。

对于 Linux 和 Mac 用户,应在 处创建配置文件~/.config/nvim

对于 Windows 用户,应在 处创建配置文件~/AppData/Local/nvim

(上面的~代表主目录)

在相应的目录中打开终端。创建文件,其名称应为init.vim。在此文件中,我们将使用 vimscript 编写配置。

快速提示:您也可以使用init.lua而不是init.vim,有关更多信息请参见最后,在本文中我将使用init.vim

现在,我们将使用 Neovim 配置 Neovim(第一次听起来很奇怪)。

基本规则

转到终端内上面提到的目录,然后输入nvim init.vim并按回车键。

快速提示:如果您只输入nvim而不提及任何文件,它将打开一个类似欢迎页面的内容。如果您输入nvim file.md时 file.md 尚不存在,Neovim 会打开它,如果您保存它,Neovim 会创建该文件。同样的规则也适用于 Vim。

现在,无需点击任何东西,忘记你还有鼠标,一旦那个令人望而生畏的文本编辑器在你面前打开,只需按下i(无需 Shift 键,无需 Ctrl 键,只需按下简单的i),即可进入插入模式。现在,你可以正常编辑文件了。要退出插入模式,或者更确切地说,退出 Vim 中的任何模式,请按 Esc 键或 Esc 键。这不会退出编辑器,只是让你返回到正常模式(默认模式)。

您现在也可以使用箭头键来浏览文件。

快速提示:在正常模式下,要向左移动按“h”,要向右移动按“l”,要向上移动按“k”,要向下移动按“j”。

在开始使用插件之前,让我们先设置一些基本规则/设置:

set number                 " Sets line numbers
set autoindent             " Sets auto indentation
set tabstop=2              " Sets tabstop
set shiftwidth=2           " For proper indentation
set smarttab               " Affects how tab key presses are interpreted
set softtabstop=2          " Control how many columns Vim uses when you hit tab key
set mouse=a                " This lets you use your mouse
set wrap                   " Sets up line wrapping
Enter fullscreen mode Exit fullscreen mode

快速提示:如果您不明白某个设置的作用,只需打开 Vim 并在正常模式下输入,:help <property_name>例如对于 shiftwidth,请执行:help shiftwidth

接下来,按 Esc 键退出插入模式。现在输入:wq(无需点击任何地方或按下 Ctrl 和 Shift 键),然后按 Enter 键,这将写入文件(基本上,它会保存文件),然后退出编辑器。

如果您只使用类型:w,它只会写入文件,而不会退出编辑器。

如果您只输入:q,它会退出编辑器,但如果您有未保存的更改,它将不允许您这样做,在这种情况下,请执行:q!,这将恢复所有未保存的更改并强制退出编辑器。

如果您想要我这里没有提到的房产,只需搜索一下,我相信您一定能找到它。

现在让我们设置插件!

设置插件

现在,有很多插件管理器(Vim/Neovim 需要插件管理器来安装插件),但对于本教程,我们将坚持使用vim-plug

对于 Unix/Linux,您可以使用以下命令安装 vim-plug:

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
       https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
Enter fullscreen mode Exit fullscreen mode

对于 Windows(Powershell),您可以使用以下命令安装 vim-plug:

iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
    ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force
Enter fullscreen mode Exit fullscreen mode

查看他们的安装说明以了解更多信息。

现在init.vim再次打开 neovim,并导航到文件末尾,你也可以使用箭头键,i这次不要按 ,而是按o,这将创建一个新行并进入插入模式。现在输入以下内容(遵循基本规则):

call plug#begin()

" Your plugins go here

call plug#end()
Enter fullscreen mode Exit fullscreen mode

快速提示:您可以使用"在 vimscript 中编写单行注释。例如" This is a comment

我们所有的插件都将位于call plug#begin和之间call plug#end

以下是我使用的一些插件:

  • coc.nvim - 我稍后会对此进行详细说明
  • presence.nvim - 一个插件,让你在 Discord 上显示你正在使用 Vim
  • lightline.vim - Vim 的轻量且可配置的状态行/标签行插件
  • nerdtree - vim 的树形浏览器插件,稍后会详细介绍
  • nerdtree-git-plugin - 一个在 nerdtree 中显示 git 状态的插件
  • vim-devicons - 一个显示文件图标的插件
  • 自动配对- 完成括号、方括号和引号
  • copilot.vim - 如果你有 GitHub Copilot,那么你可以将它与此插件一起使用

您可以像这样列出您的插件:

call plug#begin

Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'andweeb/presence.nvim'
Plug 'itchyny/lightline.vim'
Plug 'ryanoasis/vim-devicons'
Plug 'preservim/nerdtree' |
           \ Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'jiangmiao/auto-pairs'
Plug 'copilot.vim'

call plug#end
Enter fullscreen mode Exit fullscreen mode

快速提示:请永远记住,在安装插件之前,请务必查看其文档,因为有时它们可​​能会对插件的设置有特殊说明

完成后,保存文件并退出 Neovim(记住,使用:wq并按回车键)。重新打开 Neovim。要安装这些插件,请:PlugInstall在正常模式下输入 并按回车键。这将打开另一个窗格并开始安装所有插件,完成后再关闭该窗格(:q),然后也关闭 init.vim。这样就退出了 Neovim,现在,重新进入,所有插件将开始工作。

快速提示:要在窗格之间移动,请按 ctrl+w,然后h移动到左窗格,l再按 移动到右窗格

Coc.nvim 和 LSP

什么是 LSP?

LSP(语言服务提供商)就是提供语言支持的东西(编辑器中的语言支持意味着它会在编写特定语言的代码时指出你的错误并提供建议)。它也从 0.5 版本开始内置于 neovim 中。我们这里不会配置原生的 LSP,而是使用 coc.nvim。

Coc.nvim 是什么?

Coc.nvim 是一个基于原生 LSP 构建的生态系统,这意味着你无需进行任何配置。它提供了自动完成、建议和其他一些功能。由于设置简单,推荐初学者使用。我们之前已经将 coc.nvim 作为插件安装好了。

好了,搞定这些之后,我们就可以安装 coc 对我们常用语言的支持了。比如,如果你想安装 python 的支持,只需执行:CocInstall coc-python。大多数语言的支持路径都是 coc-[language-name],但为了确保万无一失,你还是直接谷歌一下,应该很容易找到。

按键绑定

现在,花点时间感到自豪吧,你已经克服了对 vim 的一些恐惧。

在 vim/neovim 中,您可以设置除现有键绑定之外的自己的键绑定。

例如,假设我想在 Neovim 中设置关闭文件的键绑定。通常情况下,我需要输入:q

为此,请在文件末尾init.vim(之后call plug#end)添加以下内容:

nnoremap <C-q> :q<CR>
Enter fullscreen mode Exit fullscreen mode

这是什么意思?

nnoremap是您正在设置键绑定的声明,因此您必须在声明任何键绑定之前放置它。

这里,在 中<C-q>,“C-”代表 Ctrl 键,后面跟着任何你想与之组合的键。例如,<C-q>代表 Ctrl+q,<C-k>代表 Ctrl+k。

其中,<C-q>&<CR>是此键映射所针对的命令。

<CR>代表回车键。nnoremap <C-q> :q<CR>也就是说,你必须按下 ctrl+q,这和输入“ ”:q然后按回车键的效果是一样的。

因为我们安装了插件,比如 nerdtree,它们为我们带来了自己的命令,例如现在您可以访问:NERDTreeToggle:CocInstall

以下是您可以为 nerdtree 设置的一些键绑定:

nnoremap <leader>n :NERDTreeFocus<CR>
nnoremap <C-n> :NERDTree<CR>
nnoremap <C-t> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>
Enter fullscreen mode Exit fullscreen mode

此按键绑定来自他们 GitHub 仓库的 readme 文件,但您可以随意更改,只要您愿意,您可以随意更改。但请记住,不要使用冲突的按键绑定。

你肯定想知道那是什么<leader>。它代表\,所以nnoremap <leader>n :NERDTreeFocus<CR>你必须输入 \n 才能运行:NERDTreeFocus命令。

NERD树

设置好 nerdtree 的按键绑定后,您可以按下 ctrl+t 打开它,然后像使用箭头键或 [h, j, k, l] 键浏览文件一样操作。要删除或重命名文件,请按下m,它会打开一个菜单,列出操作方法。要创建文件,请导航到您想要的文件所在的节点,然后按下 ,m打开菜单。

事情差不多就是这样了。

主题

您可以像安装插件一样安装主题。您可以搜索主题,有很多主题可供选择。我个人不使用任何主题,因为我的终端主题对我来说已经足够好了。

别担心,我在本文末尾列出了一些资源,以便您找到好的主题。

Lua 和 Vimscript

之前我说过你也可以添加你的配置init.lua。很多人更喜欢使用 Lua,因为它比 Vimscript 更符合逻辑。

如果您希望将您的转换init.viminit.lua,您可以查看Olivier Roques 的这篇文章。

最终外观

如果您遵循了本文中的所有内容,那么您init.vim现在应该看起来像这样:

" Basic Rules

set number
set autoindent
set tabstop=2
set shiftwidth=2
set smarttab
set softtabstop=2
set mouse=a
set encoding=UTF-8
set wrap


" Plugins

call plug#begin

Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'andweeb/presence.nvim'
Plug 'itchyny/lightline.vim'
Plug 'ryanoasis/vim-devicons'
Plug 'preservim/nerdtree' |
           \ Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'jiangmiao/auto-pairs'
Plug 'copilot.vim'

call plug#end


" Keymaps

nnoremap <leader>n :NERDTreeFocus<CR>
nnoremap <C-n> :NERDTree<CR>
nnoremap <C-t> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>

Enter fullscreen mode Exit fullscreen mode

现在看起来是这样的:

深吸一口气,感受一下成就感,你完成了。现在,继续尝试,让 Vim 成为你的专属。

Vim 中的常用命令

  • :w- 保存文件
  • :q- 关闭文件
  • :q!- 强制关闭文件并恢复未保存的更改
  • :wq- 保存并关闭文件
  • esc 键 - 从任何模式返回正常模式
  • i——进入插入模式
  • o - 下一行和插入模式
  • s——删除字符并插入
  • dd——删除行

这是devhints 提供的vim 速查表。你可以查看它来了解更多命令。

一些建议

  • 不要放弃 Vim,至少先试用一两个星期再决定是否放弃。我知道它一开始可能有点烦人,但很多人用过之后就爱上了它。
  • 不要关闭 Vim,不要在不退出 Vim 的情况下退出终端,有时会损坏文件
  • 不要使用 ctrl+z,因为某种原因导致我的 Vim 冻结
  • 您可以通过在 shell 命令前添加!
  • Windows 可能不具备 Linux 提供的某些功能,但您可以安装 wsl。
  • 提高你的打字速度,这总体上也会对你有帮助。
  • 使用别名来加快您的开发过程。
  • 练习。这是适应 Vim 的最好方法。

一些有用的工具

  • 使用目录跳转器,这样你就不用cd一直按 。我用的是z
  • 你可以在 Linux 和 Mac 设备上使用终端多路复用器。tmux 是一个很有名的终端多路复用器,也是我唯一知道的。不过我从未听说过 Powershell 上的终端多路复用器。

更多资源

如果有人想指出我遗漏的某些内容或任何其他资源,或者只是对我无法正确解释的某些内容有疑问,请在下面评论。

希望你喜欢它!

文章来源:https://dev.to/aviavinav/vim-a-beginners-guide-from-a-beginner-b11
PREV
学习 JavaScript(或任何其他语言)的 9 种最有效方法
NEXT
自由职业有多难?