Project Icon

vimrc

功能丰富的Vim配置框架

Ultimate vimrc是一个功能全面的Vim配置框架,提供基础版和进阶版两种选择。它集成了众多实用插件、配色方案和优化设置,可大幅提升Vim的使用效率。该项目支持多用户安装,兼容Linux、Windows等主流系统。用户可通过简单命令完成安装和更新,轻松定制个性化的Vim环境。

终极 vimrc

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

有两个版本:

  • 基础版:如果你想要简单的配置,只需将 basic.vim 复制到你的 ~/.vimrc 中,就可以得到一个不错的基本设置
  • 高级版:包含大量有用的插件、配色方案和配置

当然,我推荐使用高级版。

如何安装高级版?

仅为当前用户安装

高级版包含许多优秀的插件、配置和配色方案,这些都让 Vim 变得更好。要安装它,只需在终端中执行以下操作:

git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh

为多个用户安装

要为多个用户安装,需要将仓库克隆到所有目标用户都能访问的位置。

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
# 为所有拥有家目录的用户安装,注意不包括 root 用户
sh /opt/vim_runtime/install_awesome_parameterized.sh /opt/vim_runtime --all

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

字体

我推荐使用 IBM Plex Mono 字体(这是一个开源的优秀字体,可以让你的代码看起来更美观)。高级版 vimrc 已经设置好尝试使用它。

高级版还会尝试使用的其他字体:

如何安装基础版?

基础版只有一个文件,没有插件。只需复制 basic.vim 并粘贴到你的 vimrc 中。

基础版适合安装在远程服务器上,那里你不需要太多插件,也不会进行太多编辑。

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!

cd ~/.vim_runtime
git reset --hard
git clean -d --force
git pull --rebase
python update_plugins.py  # 如果 python 不可用,请使用 python3

一些截图

编辑 Python 文件时的颜色:

截图 1

终端窗口中的 NERD Tree 插件: 截图 3

使用 goyo.vimvim-zenroom2 的无干扰模式: 截图 4

包含的插件

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

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

包含的配色方案

输入 :colorscheme <Tab> 可以即时尝试配色方案, 或者将命令添加到 ~/.vim_runtime/my_configs.vim(见下文), 例如 colorscheme pyte

包含的模式

如何包含你自己的内容?

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

例如,我的 my_configs.vim 看起来像这样:

~/.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

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):

nmap <leader>w :w!<cr>

<Space> 映射到 /(搜索)和 <Ctrl>+<Space> 映射到 ?(反向搜索):

map <space> /
map <C-space> ?

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

map <silent> <leader><cr> :noh<cr>

在窗口之间智能移动(<ctrl>j 等):

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):

" 关闭当前缓冲区
map <leader>bd :Bclose<cr>

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

管理标签页的有用映射:

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 切换到打开缓冲区的目录:

map <leader>cd :cd %:p:h<cr>:pwd<cr>

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

map <leader>g :Ack 

快速打开一个缓冲区进行书写:

map <leader>q :e ~/buffer<cr>

切换粘贴模式:

map <leader>pp :setlocal paste!<cr>

可视模式映射

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

vnoremap <silent> * :call VisualSelection('f')<CR>
vnoremap <silent> # :call VisualSelection('b')<CR>

当你按下 gv 时,在选定的文本后使用 Ack.vim

vnoremap <silent> gv :call VisualSelection('gv', '')<CR>

当你按下 <leader>r 时,你可以搜索和替换选定的文本:

vnoremap <silent> <leader>r :call VisualSelection('replace')<CR>

用括号/方括号/等包围可视选择:

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>

插入模式映射

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

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

插入当前日期和时间(对时间戳很有用):

iab xdate <C-r>=strftime("%d/%m/%y %H:%M:%S")<cr>

命令行映射

$q 在命令行浏览时非常有用。它删除最后一个斜杠之前的所有内容:

cno $q <C-\>eDeleteTillSlash()<cr>

类似 Bash 的命令行按键:

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):

map <leader>o :BufExplorer<cr>

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

" 快速查找并打开 CWD 中的文件
let g:ctrlp_map = '<C-f>'

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

" 快速查找并打开缓冲区 map b :CtrlPBuffer

[NERD Tree](https://github.com/preservim/nerdtree) 映射:
```vim
map <leader>nn :NERDTreeToggle<cr>
map <leader>nb :NERDTreeFromBookmark 
map <leader>nf :NERDTreeFind<cr>

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

map <leader>z :Goyo<cr>

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

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 映射用于管理剪贴板:

nmap <C-p> <Plug>yankstack_substitute_older_paste
nmap <C-n> <Plug>yankstack_substitute_newer_paste

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

let g:ctrlp_map = '<C-f>'
map <leader>j :CtrlP<cr>
map <C-b> :CtrlPBuffer<cr>

vim-snipmate 映射用于通过代码片段自动完成:

ino <C-j> <C-r>=snipMate#TriggerSnippet()<cr>
snor <C-j> <esc>i<right><C-r>=snipMate#TriggerSnippet()<cr>

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

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

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

nmap <silent> <leader>a <Plug>(ale_next_wrap)

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

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

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

nnoremap <leader>v :.GBrowse!<CR>
xnoremap <leader>v :'<'>GBrowse!<CR>

拼写检查

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

map <leader>ss :setlocal spell!<cr>

使用 <leader> 而不是特殊字符的快捷键:

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 映射:

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 的创始人/CEO。你可以来帮助我们打造未来的工作场所,同时过上平衡的生活(在世界任何地方 🌍🌎🌏)。

PS: 使用 Vim 不是必需的 😄

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号