发布于 2026-01-06 6 阅读
0

我的基本 Neovim 设置

我的基本 Neovim 设置

在之前的几篇文章中,我介绍了为什么选择 Neovim 作为我的主要编辑器,并讲解了使用该程序的基本方法。然而,它默认情况下并没有插件或美观的界面。在这里,我将向你展示我是如何设置我的 Neovim 的。

我日常使用的编程语言包括 JavaScript(JSX 和 TypeScript)、CSS 和 Sass,最近也在学习 Python。因此,我的配置支持这些技术。

Neovim
Neovim 首次启动时的状态

关于我的配置选择

正如你所想,Neovim 是通过文本文件进行配置的。

有两种配置方法:使用 Lua 语言或 VimScript(专为 Vim 编写)。这里我将使用后者,因为它同时适用于 Vim 和 Neovim,这样可以一举两得。

我没有 Lua 的使用经验,目前也没有为了配置应用程序而学习这门语言的计划。我知道有更现代的方法可以实现这个功能,但我更倾向于保持设置简洁。

在本指南结束时,您不会像在其他地方那样看到一堆杂乱的文件和目录,而只会得到一个单独的文件,足以方便使用。

设置选项

和大多数软件一样,Vim/Neovim 也提供了编辑选项和偏好设置的方法。你可以使用命令 `--line-number` 来测试这些设置:set <option-name>。现在尝试打开一个 Vim/Neovim 实例并输入 ` :set number--line-number`,你会注意到行号会出现在侧边栏。但问题在于,每次重新打开程序时,你都必须重复这些命令。

保存设置

要保存这些设置,只需将以下命令写入用户文件夹中的一个文件中即可。文件的名称和位置会因您使用的是 Vim 还是 Neovim 而有所不同:

  • Vim<username>/.vimrc
  • Neovim<username>/.config/nvim/init.vim

如果你的用户目录下没有这些文件/目录,请手动创建它们。请记住,在 Unix 系统(Linux、BSD 和 macOS)中,以“.”开头的文件默认是隐藏的。请确保你在文件管理器或终端中已启用显示隐藏文件。

配置文件中的基本选项

在深入探讨扩展程序及其设置等更复杂的内容之前,我们先从基础知识讲起。虽然有很多选项可以调整,但我下面列出的是我目前使用的设置。请注意,该文件中包含每次打开编辑器时都需要输入的命令。



" Options
set background=dark
set clipboard=unnamedplus
set completeopt=noinsert,menuone,noselect
set cursorline
set hidden
set inccommand=split
set mouse=a
set number
set relativenumber
set splitbelow splitright
set title
set ttimeoutlen=0
set wildmenu

" Tabs size
set expandtab
set shiftwidth=2
set tabstop=2


Enter fullscreen mode Exit fullscreen mode

以下是对上述每条命令的解释:

  • background=dark:应用深色屏幕专用颜色集。不仅仅是屏幕背景,虽然看起来可能并非如此。
  • clipboard=unnamedplus:启用 Vim/Neovim 与其他应用程序之间的剪贴板功能。
  • cursorline:高亮显示编辑器中的当前行。
  • completeopt:修改自动完成菜单,使其行为更像 IDE。
  • hidden:隐藏未使用的缓冲区1
  • inccommand=split:在应用到文件之前,以分屏形式显示替换项。
  • mouse=a允许在编辑器中使用鼠标。
  • number:显示行号。
  • relativenumber显示从当前行开始的行号。这对于使用多行命令非常有用。
  • splitbelow splitright:使用命令:split(水平分割)和:vsplit(垂直分割)更改分屏行为。在这种情况下,屏幕始终会在当前屏幕下方和右侧分割。
  • title显示文件标题
  • ttimeoutlen=0命令运行所需时间(毫秒)。
  • wildmenu:显示更高级的自动完成建议菜单。
  • expandtab:将制表符转换为空格。
  • shiftwidth=2:缩进空格数。
  • tabstop=2:制表符的空格数。

句法

添加对打开文件的自动语法支持:



filetype plugin indent on
syntax on


Enter fullscreen mode Exit fullscreen mode

颜色支持

要在终端上启用 256 色:



set t_Co=256


Enter fullscreen mode Exit fullscreen mode

以下是我为 Vim 编写的逻辑,用于检测系统是否支持更多颜色。请注意,我添加了一个条件判断,以检测终端模拟器是否为 Apple 自带的。不知何故,在我使用的不同版本中,颜色表现有所不同。



" True color if available
let term_program=$TERM_PROGRAM

" Check for conflicts with Apple Terminal app
if term_program !=? 'Apple_Terminal'
    set termguicolors
else
    if $TERM !=? 'xterm-256color'
        set termguicolors
    endif
endif


Enter fullscreen mode Exit fullscreen mode

如果你不使用苹果终端,请忽略那部分,直接将代码添加到else.

支持真正的斜体

如果你和我一样喜欢真正支持斜体的字体,请添加以下代码:



" Italics
let &t_ZH="\e[3m"
let &t_ZR="\e[23m"


Enter fullscreen mode Exit fullscreen mode

别问我这些代码是什么意思。我只知道,支持斜体字的终端会把它们识别为斜体字。


NetRW:Vim 的默认文件管理器

注意:如果您已经对 Vim 有所了解,并且对 NetRW 不感兴趣,请跳过此部分。

NetRW
NetRW 现状

如果你用过集成开发环境(IDE),你可能已经注意到侧边栏总会有一个项目文件树。Vim/Neovim 默认使用 NetRW,它也具备类似的功能。

使用 `vm` 或 `neovim`[n]vim .命令打开项目目录时,文件列表会显示在目录内。也可以使用 `--file`:Ex:Vex` :Sex--file` 命令打开。

你可以使用默认设置,但我个人觉得有些地方不太满意,所以我使用了以下设置:



" File browser
let g:netrw_banner=0
let g:netrw_liststyle=0
let g:netrw_browse_split=4
let g:netrw_altv=1
let g:netrw_winsize=25
let g:netrw_keepdir=0
let g:netrw_localcopydircmd='cp -r'


Enter fullscreen mode Exit fullscreen mode

解释如下:

  • g:netrw_banner=0:隐藏默认显示的顶部横幅。
  • g:netrw_liststyle=0更改文件的显示方式。
    • 0一次只显示一个目录。
    • 1显示文件数据。
    • 2按列显示文件。
    • 3以树状图的形式展开打开的目录。
  • g:netrw_browse_split=4:改变文件的打开方式。
    • 1以水平分割方式打开文件。
    • 2以垂直分割的方式开始。
    • 3在新标签页中打开。
    • 4在之前的窗口中打开,避免创建更多分区。
  • g:netrw_altv=1:将 NetRW 显示屏切换到左侧。
  • g:netrw_winsize=25:将窗口大小限制为可用屏幕空间的 25%。
  • g:netrw_keepdir=0:保留您之前访问过的目录。
  • g:netrw_localcopydircmd:修改用于复制文件的命令。默认情况下,NetRW 只会复制空文件夹。为了改变这一点,我将默认命令设置为cp -r递归复制。

为了方便创建文件,我添加了更多设置:



" Create file without opening buffer
function! CreateInPreview()
  let l:filename = input('please enter filename: ')
  execute 'silent !touch ' . b:netrw_curdir.'/'.l:filename
  redraw!
endfunction

" Netrw: create file using touch instead of opening a buffer
function! Netrw_mappings()
  noremap <buffer>% :call CreateInPreview()<cr>
endfunction

augroup auto_commands
    autocmd filetype netrw call Netrw_mappings()
augroup END


Enter fullscreen mode Exit fullscreen mode

这样可以防止 NetRW 为了创建文件而打开一个空白屏幕。

如果你想使用 NetRW,我认为这是舒适使用它所需的最低配置。

NetRW及其问题

NetRW 因其导致缓冲区混乱而备受诟病。根据我的研究,使用g:netrw_liststyle=3树形模式似乎会加剧这种情况。错误是随机发生的,这使得修复过程十分困难,而且仅更新 NetRW 也比预期要复杂得多。

这就是为什么有几种替代 NetRW 的方法,其中最著名的是 NERDTree,我在我的主要配置中使用它。


插件

NetRW
使用我们目前所做的调整后的 Neovim

插件管理器设置

最后,是时候配置插件了。与 VS Code 或其他编辑器不同,Vim 提供了多种扩展安装程序:Neobundle、Vundle、Vim-Plug 等。这里我将使用最后一个,它似乎是目前最常用的。要安装它,请打开终端并运行以下命令:

对于 Vim:



$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim


Enter fullscreen mode Exit fullscreen mode

对于 Neovim:



$ 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

以上命令完成了在编辑器中使用 Vim-Plug 所需的所有操作。

安装插件

Vim-Plug 会读取配置文件的一部分,以便在 GitHub 上查找扩展程序并将其安装到编辑器中。这部分内容由以下结构分隔:



call plug#begin()
    Plug '<github-user>/<repo-name>'
call plug#end()


Enter fullscreen mode Exit fullscreen mode

您可以一次添加多个扩展,只需Plug根据需要添加即可。如果您想轻松查找这些插件,可以访问一个名为 Vim Awesome 的网站。链接在文章末尾。

我使用的插件

以下是我在 Vim/Neovim 中使用的设置:



call plug#begin()
    " Appearance
    Plug 'vim-airline/vim-airline'
    Plug 'ryanoasis/vim-devicons'

    " Utilities
    Plug 'sheerun/vim-polyglot'
    Plug 'jiangmiao/auto-pairs'
    Plug 'ap/vim-css-color'
    Plug 'preservim/nerdtree'

    " Completion / linters / formatters
    Plug 'neoclide/coc.nvim',  {'branch': 'master', 'do': 'yarn install'}
    Plug 'plasticboy/vim-markdown'

    " Git
    Plug 'airblade/vim-gitgutter'
call plug#end()


Enter fullscreen mode Exit fullscreen mode
  • Vim Airline:修改状态栏,使其比默认状态栏更美观。
  • Vim Devicons:在界面中显示图标,基于图标字体2
  • Vim Polyglot:支持多种编程语言的语法高亮显示。
  • 自动配对:输入时自动闭合圆括号、方括号和花括号。
  • Vim CSS 颜色:直接在代码中显示颜色(十六进制、RGB、HSL)。
  • NERDTree:用于访问项目文件的侧边栏。它取代了我之前提到的 NetRW。
  • CoC(Conquer of Completion):提供自动补全功能,与 VS Code 中的功能非常相似。稍后我会详细介绍。
  • Vim Markdown:更好地支持 Markdown 文件语法。
  • Vim GitGutter:显示打开文件中的 Git 更改。

仅仅输入这些地址不足以安装扩展。首先,您必须保存配置文件并重启 Vim,编辑器才能应用新添加的设置。之后,再运行命令:PlugInstall

Vim插件
Vim插件

将会弹出一个窗口,显示每个扩展的安装过程。安装完成后,您需要再次重启 Vim 才能使用新扩展。

要卸载,请从配置文件中删除要删除的插件的行,然后在重新启动编辑器后运行命令:PlugClean


配色方案

如果说良好的开发体验有什么关键因素,那就是好的配色方案。它们的安装方式与扩展程序相同。

首先,添加指向主题Github仓库路径的行:



call plug#begin()
    Plug 'morhetz/gruvbox'
call plug#end()


Enter fullscreen mode Exit fullscreen mode

要使用此主题,请在配置文件中添加相应的命令colorscheme gruvbox。这样就能消除默认的黑屏和刺眼的色彩。

我使用的配色方案

Sobrio 和 NetRW
Sobrio:我日常生活中使用的主题

尽管我用 GruvBox 主题做了个示范,但这并不是我最终使用的主题。配色方案是非常主观的,而且在使用这个主题的过程中,我最终对它感到有些厌倦。其他主题也是如此。由于找不到我喜欢的,所以我自己做了一个,叫做 Sobrio。如果你想测试一下,只需按照上面的步骤操作,只需更改仓库即可:



call plug#begin()
    Plug 'elvessousa/sobrio'
call plug#end()


Enter fullscreen mode Exit fullscreen mode

然后只需添加colorscheme sobrio并重启编辑器即可。欢迎留下您的评论和建议。我很想知道您的看法。如果您想了解更多信息,文章末尾有网站链接。


插件配置

神像

Devicons 是一个为 Vim 界面添加图标的扩展。要使其正常工作,系统必须安装支持图标的字体。

在网上搜索“NERD Fonts”,你会找到很多字体。在系统上安装字体的方法因操作系统而异,这里我就不赘述了。下载、安装字体并将其应用到你的终端模拟器中即可。除此之外,无需其他配置。

航空公司

航空公司

这里几乎没什么设置。基本上就是选择要使用的主题,以及是否要使用“Powerline”模式,也就是那些带箭头的线条。



let g:airline_theme='sobrio'
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1


Enter fullscreen mode Exit fullscreen mode

上面的最后一个选项启用了标签栏中的航空公司信息。

NERDTree

NERDTree 是 NetRW 的替代品。默认情况下,它运行良好。我只是添加了一行代码,使其默认显示隐藏文件。



" File browser
let NERDTreeShowHidden=1


Enter fullscreen mode Exit fullscreen mode

你知道,我喜欢直接查看文件.env,而.gitignore不用I先输入文字。

Sobrio para Vim
Neovim com 作为配置集市

CTRLP

此插件支持在项目文件夹中搜索文件。它的快捷键与其名称相同。如果您使用过 VS Code,您会很快上手。我只做了以下设置:



let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']


Enter fullscreen mode Exit fullscreen mode

用通俗易懂的语言来说:CTRLP 将忽略项目.gitignore文件中提到的每个文件或目录。

Vim Markdown

如果您不使用 Markdown,请跳过此部分。

由于我经常使用 Markdown 格式在我的博客上写作,所以我安装了这个扩展程序来改善 Neovim 中此类文件的显示效果。



" Disable math tex conceal feature
let g:tex_conceal = ''
let g:vim_markdown_math = 1

" Markdown
let g:vim_markdown_folding_disabled = 1
let g:vim_markdown_frontmatter = 1
let g:vim_markdown_conceal = 0
let g:vim_markdown_fenced_languages = ['tsx=typescriptreact']


Enter fullscreen mode Exit fullscreen mode

我在页面顶部使用 YAML 头部(Frontmatter),以便 Gatsby 能够正常工作。如果没有这个插件,Frontmatter 和代码块的语法将无法识别。

征服:完成

这是配置要求最高的插件。“Conquer of Completion”作为一个服务器,提供代码自动补全和纠错工具,其工作方式类似于 VS Code。它还支持扩展程序,这些扩展程序负责添加对所需编程语言的支持。

CoC 的缺点在于它基于 NodeJS,因此像所有 Node 项目一样,已安装软件包的依赖项会占用一定的磁盘空间。在我目前测试过的项目中,它最符合我的预期,而且配置也最少。

安装扩展程序很简单:只需运行命令:CocInstall <extension-name>,即可使用这些功能。

以下是我使用的扩展程序:

  • coc-tsserver:支持 JavaScript、TypeScript 和 React。
  • coc-css:支持 CSS、Sass 和 SCSS。
  • coc-eslint:检查 JavaScript 和 TypeScript 文件。
  • coc-emmet:为 HTML、CSS、Sass、SCSS 和扩展 JavaScript 文件(JSX、TSX)添加快捷方式,以减少代码编写量。
  • coc-pyright:Python 支持。
  • coc-prettier:根据社区公认的标准格式化代码。

要一次性安装所有程序,只需运行以下命令:



:CocInstall coc-tsserver coc-css coc-eslint coc-emmet coc-pyright coc-prettier


Enter fullscreen mode Exit fullscreen mode

使用 coc-prettier 更漂亮



" Language server stuff
command! -nargs=0 Prettier :call CocAction('runCommand', 'prettier.formatFile')


Enter fullscreen mode Exit fullscreen mode

上面的命令会在你保存文件时运行 Prettier 并格式化文件。这很有帮助,因为我可以减少按Tab缩进键的时间。

JSON 中的 Coc 设置

除了我们目前使用的init.vim`or`之外,我还使用一个名为 `.` 的单独文件。通过它,可以修改扩展程序的行为。.vimrccoc-settings.json



{
  "coc.preferences.formatOnSaveFiletypes": [
    "css",
    "sass",
    "scss",
    "markdown",
    "html",
    "json",
    "javascript",
    "javascriptreact",
    "typescript",
    "typescriptreact",
    "python"
  ],
  "python.formatting.provider": "black",
  "python.formatting.blackPath": "~/.local/bin/black",
  "prettier.singleQuote": true,
  "javascript.autoClosingTags": true,
  "typescript.autoClosingTags": true,
  "emmet.includeLanguages": [
    "javascript",
    "javascriptreact",
    "typescript",
    "typescriptreact",
    "html"
  ],
  "codeLens.enable": false
}


Enter fullscreen mode Exit fullscreen mode

以下是对上述设置的解释:

  1. 配置 CoC 在保存时格式化某些文件类型。
  2. 配置 Prettier,使其在格式化时优先使用单引号。
  3. 请告知 Python 代码格式化工具(本例中为“black”),并传入我系统上 black 的路径。
  4. 启用扩展 JavaScript 标签 (JSX) 的自动关闭功能
  5. 启用 Emmet 以支持更多文件格式。
  6. 禁用代码透镜,因为它偶尔会崩溃。

请注意,如果您不使用 Python,请忽略其相关设置。要使 Python 格式化程序正常工作,必须将其安装在系统上:



$ pip install black


Enter fullscreen mode Exit fullscreen mode

键盘快捷键

与其他程序一样,Vim 也支持配置键盘快捷键。每个编辑器模式都可以进行配置,而且功能非常丰富。要在 Vim 中添加键盘快捷键,只需添加以下表达式:



[first-letter-of-target-mode]noremap <key-or-letters> :Command


Enter fullscreen mode Exit fullscreen mode

这个奇怪的词noremap来源于No n Re cursive Map ping”,即“非递归映射”。这意味着创建的快捷方式不会覆盖另一个类似的快捷方式,从而避免冲突。

由于我比较崇尚极简主义,所以没有添加很多快捷方式。



" Normal mode remappings
nnoremap <C-q> :q!<CR>
nnoremap <F4> :bd<CR>
nnoremap <F5> :NERDTreeToggle<CR>
nnoremap <F6> :sp<CR>:terminal<CR>

" Tabs
nnoremap <S-Tab> gT
nnoremap <Tab> gt
nnoremap <silent> <S-t> :tabnew<CR>


Enter fullscreen mode Exit fullscreen mode

以下是对上述映射关系的解释:

  • Ctrl+q关闭打开的屏幕。
  • F4关闭打开的文件。
  • F5:显示或隐藏 NERDTree。
  • F6:在下方分屏窗口中打开终端。
  • Shift+Tab切换到上一个标签页。
  • Shift+t:创建一个标签页。
  • Tab切换到下一个打开的标签页。

请注意,这里有多个符号。这些符号<CR>代表您在命令模式下需要按下的所有键Enter。CR是“回车键”(Carriage Return)的缩写,这个术语源于打字机时代。如今,我们通常将其理解为回车键或换行键。EnterReturn

我使用的所有快捷键都是针对普通模式的,所以nnoremap每行都会显示。如果是插入模式,则会显示为inoremap,如果是vnoremap可视化模式,则以此类推。

自动命令

为了实现某些操作的自动化,Vim 允许定义它所谓的autocmd:在特定事件发生时执行的自动命令。



" Auto Commands
augroup auto_commands
    autocmd BufWrite *.py call CocAction('format')
    autocmd FileType scss setlocal iskeyword+=@-@
augroup END


Enter fullscreen mode Exit fullscreen mode

上面我定义了两个操作:一个是在保存文件时格式化 Python 代码,另一个是解决我遇到的 SCSS 文件不一致的问题。


包起来

毫无疑问,这是我目前为止写过的最长的文章,但如果你按照说明操作,现在你已经拥有了一个功能非常强大的编辑器。虽然还有其他插件,但随着你逐渐熟悉并建立信心,你会尝试其他更适合你需求的插件。

理想情况下,尽量保持初始化文件简洁。过多的扩展会影响性能。我还使用了一些本文未详细介绍的其他设置,因为它们在大多数情况下并不重要。如果您有兴趣,可以在本文末尾查看我的dotfiles仓库链接。

我们下篇文章见!

链接


如果这篇文章对您有所帮助,请考虑捐赠。您的支持将帮助我创作更多类似的内容!


  1. 缓冲区:缓冲区是 Vim 内存中用于保存从文件中读取的文本的区域 。↩

  2. 图标字体:一系列可作为字体使用的矢量图标 。↩

文章来源:https://dev.to/elvesousa/my-basic-neovim-setup-253l