Vimrc一个终极Vim的配置

The Ultimate vimrc


在过去的十年里,我一直在使用和调整 Vim。这个配置是终极版的 vimrc(或者至少是我的版本)。

有两个版本:

基础版: 如果您想要一些小版本,只需将 basic.vim 复制到您的 ~/.vimrc 中,即可获得一个良好的基本设置。
超极版: 包含大量实用的插件、配色方案和配置。
当然,我推荐使用超极版。

如何安装 Awesome 版本?

仅为您自己的用户安装

Awesome 版本包含许多出色的插件、配置和配色方案,可显著提升 Vim 的体验。要安装它,只需在终端中执行以下操作:

shell 复制代码
git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh

为多个用户安装

要为多个用户安装,需要将代码库克隆到所有目标用户均可访问的位置。

shell 复制代码
git clone --depth=1 https://github.com/amix/vimrc.git /opt/vim_runtime
sh /opt/vim_runtime/install_awesome_parameterized.sh /opt/vim_runtime user0 user1 user2
# to install for all users with home directories, note that root will not be included
sh /opt/vim_runtime/install_awesome_parameterized.sh /opt/vim_runtime --all

当然,“/opt/vim_runtime”可以是任何目录,只要指定的所有用户都拥有读取权限即可。

字体

我推荐使用 IBM Plex Mono 字体(这是一款非常棒的开源字体,可以让你的代码看起来更美观)。Awesome vimrc 已经设置好了,你可以尝试使用它。

Awesome 会尝试使用的其他一些字体:

如何安装 Basic 版本?

Basic 版本只有一个文件,没有插件。只需复制 basic.vim 并将其粘贴到你的 vimrc 中即可。

基本版本适用于安装在远程服务器上,因为您不需要安装太多插件,也不需要进行太多编辑。

language 复制代码
git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_basic_vimrc.sh

如何在 Windows 上安装?

使用 gitforwindows 检出仓库并运行上述安装说明。无需特殊说明 ;-)

如何在 Linux 上安装

如果您的 vim 别名为 vi 而不是 vim,请确保为其添加别名:alias vi=vim。否则,请使用 apt-get install vim

如何更新到最新版本?

只需执行 git rebase 即可!

language 复制代码
cd ~/.vim_runtime
git reset --hard
git clean -d --force
git pull --rebase
python update_plugins.py # 如果 Python 不可用,请使用 Python3

一些截图

编辑 Python 文件时的颜色:

包含的插件

我建议阅读这些插件的文档,以便更好地理解它们。每个插件都能带来更佳的 Vim 体验!

  • ack.vim:用于 the_silver_searcher (ag) 或 ack 的 Vim 插件——一个超快的 grep 命令
  • bufexplorer.zip:快速轻松地在缓冲区之间切换。此插件可以使用 <leader+o> 打开
  • ctrlp.vim:模糊文件、缓冲区、最常用搜索器和标签查找器。它映射到 <Ctrl+F>
  • goyo.vimvim-zenroom2:
  • lightline.vim: Vim 的轻量级可配置状态行/标签行
  • NERD Tree: Vim 的树形浏览器插件
  • open_file_under_cursor.vim: 按下 gf 键时打开光标下的文件
  • pathogen.vim: 管理你的 vim 运行时路径
  • snipmate.vim: snipmate.vim 旨在成为一个简洁的 vim 脚本,在 Vim 中实现 TextMate 的部分代码片段功能。
  • ale: vim 的语法和 lint 检查(ALE 需要 NeoVim >= 0.2.0 或 Vim 8 并添加 +timers +job +channel 功能)
  • vim-commentary: 注释掉内容。使用 gcc 注释掉一行(需要计数),gc 注释掉动作的目标。 gcu 取消注释一组相邻的注释行
  • vim-expand-region:允许您使用相同的组合键以可视化方式选择越来越大的文本区域
  • vim-fugitive:一个非常棒的 Git 包装器,它应该是非法的
  • vim-indent-object:定义一个新的文本对象,表示相同缩进级别的代码行。适用于 Python/vim 脚本
  • vim-multiple-cursors:Sublime Text 风格的 Vim 多选功能,CTRL+N 键已重新映射为 CTRL+S(由于 YankRing 的影响)
  • vim-yankstack:保存之前的复制、修改和删除操作的历史记录
  • vim-zenroom2 移除所有杂乱内容,专注于关键内容。类似于 iA Writer 或 Write Room
  • gist-vim 使用 :Gist 命令轻松在 Vim 中创建 Gist
  • vim-indent-guides 是一款用于在 Vim 中直观显示缩进级别的插件
  • editorconfig-vim EditorConfig 可帮助多个开发人员在不同的编辑器和 IDE 上维护同一项目的一致编码风格
  • copilot.vim GitHub Copilot 插件(AI 自动补全功能,超赞😅)

已包含的配色方案

输入 :colorscheme <Tab> 即可即时尝试配色方案,
或者将命令添加到 ~/.vim_runtime/my_configs.vim(参见下文#如何包含您自己的内容),
例如 colorscheme pyte

新增模式

如何包含你自己的内容?

安装完成后,
创建一个空的 ~/.vim_runtime/my_configs.vim 文件,以便进一步自定义。
此文件的语法与 vimrc 语法匹配,
并根据需要添加 vimrc 行,例如 set number

例如,我的 my_configs.vim 如下所示:

shell 复制代码
~/.vim_runtime > cat my_configs.vim
map <leader>ct :cd ~/Desktop/Todoist/todoist<cr>
map <leader>cw :cd ~/Desktop/Wedoist/wedoist<cr>

你也可以安装插件,例如,通过 pathogen 安装 vim-rails

language 复制代码
cd ~/.vim_runtime
git clone git://github.com/tpope/vim-rails.git my_plugins/vim-rails

你也可以不使用插件管理器来安装插件(需要 vim 8 及以上版本):

  • 创建插件包目录:
    mkdir -p ~/.vim_runtime/pack/plugins/start
  • 克隆你想要的插件到该目录,例如:
    git clone --depth=1 git://github.com/maxmellon/vim-jsx-pretty ~/.vim_runtime/pack/plugins/start/vim-jsx-pretty

按键映射

leader,,因此每当您看到 <leader> 时,它都表示 ,

普通模式映射

快速保存缓冲区 (<leader>w):

vim 复制代码
nmap <leader>w :w!<cr>

<Space> 映射到 /(搜索),将 <Ctrl>+<Space> 映射到 ?(向后搜索):

vim 复制代码
map <space> /
map <C-space> ?

按下 <leader><cr> 时禁用高亮:

vim 复制代码
map <silent> <leader><cr> :noh<cr>

在窗口之间切换的智能方式(<ctrl>j 等):

vim 复制代码
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

关闭当前缓冲区(<leader>bd<leader>ba)):

vim 复制代码
" 关闭当前缓冲区
map <leader>bd :Bclose<cr>

" 关闭所有缓冲区
map <leader>ba :1,1000 bd!<cr>

用于管理标签页的实用映射:

vim 复制代码
map <leader>tn :tabnew<cr>
map <leader>to :tabonly<cr>
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove

" 使用当前缓冲区的路径打开新标签页
" 在编辑同一目录中的文件时非常有用
map <leader>te :tabedit <C-r>=escape(expand("%:p:h"), " ")<cr>/

切换 CWD 到打开缓冲区的目录:

vim 复制代码
map <leader>cd :cd %:p:h<cr>:pwd<cr>

打开 ack.vim 进行快速搜索:

vim 复制代码
map <leader>g :Ack

快速打开一个缓冲区用于粘贴:

vim 复制代码
map <leader>q :e ~/buffer<cr>

打开或关闭粘贴模式:

vim 复制代码
map <leader>pp :setlocal paste!<cr>

可视模式映射

在可视模式下按 *# 键可搜索当前选择:

vim 复制代码
vnoremap <silent> * :call VisualSelection('f')<CR>
vnoremap <silent> # :call VisualSelection('b')<CR>

按下 gv 键后,在选定文本后执行 Ack.vim 操作:

vim 复制代码
vnoremap <silent> gv :call VisualSelection('gv', '')<CR>

按下 <leader>r 键可搜索并替换选定的内容文本:

vim 复制代码
vnoremap <silent> <leader>r :call VisualSelection('replace')<CR>

用括号/方括号等括住可视选择:

vim 复制代码
vnoremap $1 <esc>`>a)<esc>`<i(<esc>
vnoremap $2 <esc>`>a]<esc>`<i[<esc>
vnoremap $3 <esc>`>a} {<esc>`<i{<esc>
vnoremap $$ <esc>`>a"<esc>`<i"<esc>
vnoremap $q <esc>`>a'<esc>`<i'<esc>
vnoremap $e <esc>`>a`<esc>`<i`<esc>

插入模式映射

快速插入括号/方括号等:

vim 复制代码
inoremap $1 ()<esc>i
inoremap $2 []<esc>i
inoremap $3 {<esc>i
inoremap $4 {<esc>o<esc>O
inoremap $q ''<esc>i
inoremap $e ""<esc>i
inoremap $t <><esc>i

插入当前日期和时间(用于时间戳):
`​​``vim
iab xdate =strftime("%d/%m/%y %H:%M:%S")

复制代码
### 命令行映射

$q 在命令行浏览时非常有用。它会删除最后一个斜杠之前的所有内容:
```vim
cno $q <C-\>eDeleteTillSlash()<cr>

类似 Bash 的命令行按键:

vim 复制代码
cnoremap <C-A> <Home>
cnoremap <C-E> <End>
cnoremap <C-K> <C-U>

cnoremap <C-P> <Up>
cnoremap <C-N> <Down>

使用 sudo 写入文件(仅适用于 Unix)。当您打开文件但无权保存更改时,这非常有用。 Vim 技巧:

:W

插件相关映射

打开 bufexplorer 查看和管理当前缓冲区 (<leader>o):

vim 复制代码
map <leader>o :BufExplorer<cr>

打开 ctrlp.vim 插件快速查找文件或缓冲区 (<leader>j<ctrl>f):

vim 复制代码
" 在连续工作区 (CWD) 中快速查找并打开文件
let g:ctrlp_map = '<C-f>'

" 快速查找并打开最近打开的文件
map <leader>f :MRU<CR>

" 快速查找并打开缓冲区
map <leader>b :CtrlPBuffer<cr>

NERD Tree 映射:

vim 复制代码
map <leader>nn :NERDTreeToggle<cr>
map <leader>nb :NERDTreeFromBookmark
map <leader>nf :NERDTreeFind<cr>

goyo.vimvim-zenroom2 让你一次只专注于一件事。它能消除所有干扰,使内容居中。在编辑 Markdown、reStructuredText 和文本文件时,它具有特殊的外观。它只有一个映射。(<leader>z)

vim 复制代码
map <leader>z :Goyo<cr>

vim-multiple-cursors 映射用于同时管理多个光标:

vim 复制代码
let g:multi_cursor_start_word_key = '<C-s>'
let g:multi_cursor_select_all_word_key = '<A-s>'
let g:multi_cursor_start_key = 'g<C-s>'
let g:multi_cursor_select_all_key = 'g<A-s>'
let g:multi_cursor_next_key = '<C-s>'
let g:multi_cursor_prev_key = '<C-p>'
let g:multi_cursor_skip_key = '<C-x>'
let g:multi_cursor_quit_key = '<Esc>'

vim-yankstack 映射用于管理 kill-ring(剪贴板):

vim 复制代码
nmap <C-p> <Plug>yankstack_substitute_older_paste
nmap <C-n> <Plug>yankstack_substitute_newer_paste

ctrl-p 映射用于轻松查找和打开文件、缓冲区等:

vim 复制代码
let g:ctrlp_map = '<C-f>'
map <leader>j :CtrlP<cr>
map <C-b> :CtrlPBuffer<cr>

vim-snipmate 映射用于自动补全代码片段:

vim 复制代码
ino <C-j> <C-r>=snipMate#TriggerSnippet()<cr>
snor <C-j> <esc>i<right><C-r>=snipMate#TriggerSnippet()<cr>

vim-surround 映射,可轻松使用 _() gettext 注释包围字符串:

vim 复制代码
vmap Si S(i_<esc>f)
au FileType mako vmap Si S"i${ _(<esc>2f"a) } }

ale 轻松跳转到下一个 Ale 语法/lint 错误:

vim 复制代码
nmap <silent> <leader>a <Plug>(ale_next_wrap)

vim-indent-guides 中,默认的插件映射是 (<leader>ig)

你也可以在 Vim 中使用以下命令:
:IndentGuidesEnable
:IndentGuidesDisable
:IndentGuidesToggle

vim-fugitive 将 Git 仓库中某一行的链接复制到剪贴板:

vim 复制代码
nnoremap <leader>v :.GBrowse!<CR>
xnoremap <leader>v :'<'>GBrowse!<CR>

拼写检查

<leader>ss 可切换拼写检查:

vim 复制代码
map <leader>ss :setlocal spell!<cr>

使用 <leader> 代替特殊字符的快捷键:

vim 复制代码
map <leader>sn​​ ]s
map <leader>sp [s
map <leader>sa zg
map <leader>s? z=

运行代码

要直接从 vim 运行代码,请按 F5。当前打开的代码将立即执行,无需您输入任何内容。

可用于执行用 C、C++、Java、Python、Go、Octave、Bash 脚本和 HTML 编写的代码。要编辑代码的执行方式,请在文件 ~/.vim_runtime/vimrcs/extended.vim 中进行更改。

Cope

如果您不确定 cope 是什么,请查询 :help cope。它非常有用!

当您使用 Ack.vim 搜索时,请在 cope 中显示结果:
<leader>cc

要转到下一个搜索结果执行:
<leader>n

要返回上一个搜索结果,执行:
<leader>p

Cope 映射:

vim 复制代码
map <leader>cc :botright cope<cr>
map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg
map <leader>n :cn<cr>
map <leader>p :cp<cr>

如何卸载

只需执行以下操作:

  • 删除 ~/.vim_runtime
  • 删除 ~/.vimrc 中所有引用 .vim_runtime 的行

正在寻找远程优先的工作?

维护 Vim 配置并非我的日常工作。我每天都是 Doist 的创始人/首席执行官。您可以加入我们,在享受平衡生活的同时(在世界任何地方)帮助我们构建未来的工作场所。 🌍🌎🌏)。

PS:使用 Vim 并不是要求😄

关于项目

只需将 basic.vim 复制到您的 ~/.vimrc 中,您就会有一个很好的基本设置,它包含大量有用的插件、配色方案和配置。
MIT
VimScript
31,523
7313
778
2012-05-30
2024-10-06

增长趋势 - stars