配置vim
开始之前
够用就好!!!!!!!!!!
关于过时插件的替代 https://www.zhihu.com/question/31934850
我的设置
直接在~/.vimrc文件上写上如下配置即可
"逗号作为leader键
let mapleader=","
set nu "显示行号
"set cursorline "高亮显示当前行
"set cursorcolumn 高亮显示当前列
set hlsearch "高亮显示搜索结果
set incsearch "渐进式搜索
syntax on
"markdown 或者 json显示所有字符
set conceallevel=0
set updatetime=300
set nowrap " 不换行
"更换代码补全弹窗颜色,ctermbg用于终端,guibg用于gvim
"highlight Pmenu ctermbg=gray ctermfg=black
"highlight PmenuSel ctermbg=lightblue ctermfg=black
set guifont=consolas\ 13
" 鼠标点选
set mouse=a
" 查找计数 超过99个不会显示,或者使用 :%s/pattern//gn
" 得到计数,n的意思是显示计数且不真的做替换
" set shortmess-=S
"
"取消回车自动换行注释
"set paste
"手动折叠
set foldmethod=manual
"缩进折叠
"set foldmethod=indent
"语法折叠
"set foldmethod=syntax
"折叠代码
nnoremap <leader>zf vi{zf
"txt文本用c语言的语法高亮
"autocmd BufRead,BufNewFile *.txt set syn=c
"md文件用c语言的语法高亮
autocmd BufRead,BufNewFile *.md setfiletype cpp
" 自适应不同语言的智能缩进
filetype indent on
" 将制表符扩展为空格
set expandtab
" 设置编辑时制表符占用空格数
set tabstop=4
" 设置格式化时制表符占用空格数
set shiftwidth=4
" 让 vim 把连续数量的空格视为一个制表符
set softtabstop=4
"关闭vi兼容,否则退格键无法删除文本
set nocompatible
set backspace=indent,eol,start
"禁止产生临时文件
set noundofile
set nobackup
set noswapfile
"保存自动删除行尾的空白字符
autocmd BufWritePre *.c,*.h,*.cpp,*.hpp,*.cc,*.java,*.cs,*.py,*.sh :%s/\s\+$//e
"设置utf8兼容
set fileencodings=utf-8,gbk,gb2312,big5,ucs-bom,gb18030,cp936
" ,0 表示粘贴寄存器0的内容(y复制的内容,避免p的时候粘贴的是刚刚d的内容)
nnoremap <leader>0 "0p
"查找与替换
nnoremap <C-f> /
nnoremap <C-h> :%s/
"利用grep全局查找,忽略大小写,类似vscode的ctrl shift f
nnoremap <leader>f :!grep -ri
" ctags F12跳转到函数定义
nnoremap <F12> <C-]>
"以上作为基础配置,任意vim都可以用,以下是插件,可以不配置
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'gcmt/wildfire.vim'
Plug 'tpope/vim-surround'
" Plug 'junegunn/seoul256.vim'
"缩进线
Plug 'Yggdroot/indentLine'
"括号高亮
Plug 'luochen1990/rainbow'
Plug 'Yggdroot/LeaderF', { 'do': ':LeaderfInstallCExtension' }
" 下划线高亮当前单词
Plug 'itchyny/vim-cursorword'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Plug 'tanvirtin/monokai'
call plug#end()
"括号高亮----------------
let g:rainbow_active = 1
"-----------------------
" config coc---------------
"let g:coc_global_extensions = ['coc-clangd']
"更换代码补全弹窗颜色,ctermbg用于终端,guibg用于gvim
"终端,背景色灰色,前景色白色
"highlight Pmenu ctermbg=white ctermfg=black
"选中项,背景色浅灰。关于vim数字支持的颜色可以参考 https://www.cnblogs.com/guochaoxxl/p/7399886.html
"hi CocMenuSel ctermbg=blue ctermfg=black
"Tab键补全
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
inoremap <silent><expr> <TAB>
\ coc#pum#visible() ?( CheckBackspace() ? "\<Tab>" : coc#pum#confirm() ):
\ "\<Tab>"
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
"Enter键补全
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"
"----------------------------
"config nerdtree---------------------
"打开vim后自动打开nerdtree
autocmd vimenter * NERDTree
wincmd w
autocmd VimEnter * wincmd w
" 是否显示隐藏文件
let NERDTreeShowHidden=1
"当NERDTree为剩下的唯一窗口时自动关闭
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
"F2 打开和关闭
map <F2> :NERDTreeToggle<CR>
"--------------------------------
"config airline-----------"
"let g:airline_theme="behelit"
"头顶显示文件名
let g:airline#extensions#tabline#enabled = 1
"-------------------------"
" config seoul256--------------
" let g:seoul256_background = 233
" let g:seoul256_light_background = 256
" colo seoul256
" colo seoul256-light
" config seoul256 end----------
"config ctrlp-------------------
"default file mode
"let g:ctrlp_by_filename = 1
"----------------------------
"indentLine---------------------
" 使插件生效
let g:indentLine_enabled = 1
" 设置缩进线字符,也可以为 '¦', '┆', '┊' 等
let g:indentLine_char = '|'
" 使插件正常运行
let g:indentLine_conceallevel = 2
"-----------------------------
"config leaderF-------------------
"下一行配置仅仅针对msys2的vim有建议作用
" let &pythonthreedll='/usr/bin/msys-python3.11.dll'
"same to vscode
"ctrl p 打开文件,默认的快捷键是<leader>f,这里改为ctrl p
let g:Lf_ShortcutF = '<C-P>'
"打开buffer,默认就是<leader>b
" 打开函数列表,vscode中是ctrl shift o,这里设置为<leader>o;
" 该功能依赖ctags
" 加叹号进入normal模式,不加进入搜索模式
nnoremap <leader>o :LeaderfFunction!<CR>
nnoremap <leader>fun :LeaderfFunction!<CR>
nnoremap <leader>line :LeaderfLine<CR>
nnoremap <leader>rg :Leaderf rg<CR>
" 关闭第一列容易乱码的字符
let g:Lf_ShowDevIcons = 0
" 显示函数列表
noremap <F8> :LeaderfFunction<CR>
"---------------------------------
"custom command
command Configvim : e ~/.vimrc
command W : w
command Q : q
command Wq : wq
"custom keymap
" 切换头文件和cpp文件
function! OpenRelatedFile()
let currentFilePath = expand('%:p')
let currentFileName = expand('%:t')
let currentFileExtension = substitute(currentFileName, '.*\.', '', '')
if currentFileExtension == 'h'
let relatedFileName = substitute(currentFileName, '\.h$', '.cpp', '')
elseif currentFileExtension == 'cpp'
let relatedFileName = substitute(currentFileName, '\.cpp$', '.h', '')
else
echo "无法处理的文件类型"
return
endif
let relatedFilePath = fnamemodify(currentFilePath, ':p:h') . '/' . relatedFileName
execute 'e ' . relatedFilePath
endfunction
nnoremap <leader>o :call OpenRelatedFile()<CR>
插件管理 vim-plugin
vundle已经不再使用;
下载下面的plug.vim
文件:
https://gitee.com/blime/vim-plug/raw/master/plug.vim
这是gitee同步的仓库,原仓库是 https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 可能无法访问
接下来把文件放到合适的位置
- 如果是Windows将文件放在
~/vimfiles/autoload
- 如果是unix 放在
~/.vim/autoload
文件夹内
安装插件
安装插件,只需要将插件写在 .vimrc
内,然后在 vim 中使用 :PlugInstall 命令即可:
call plug#begin('~/.vim/plugged')
call plug#end()
例如,安装vim-airline插件,就可以写成这样
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
call plug#end()
确保插件要放在 begin 和 end 之间
重新打开 vim 使用命令 :PlugInstall ,Finishing ... Done! 表示安装完成
实际插件安装的位置在~/.vim/plugged
,他就是给你git clone了一个项目放在这个目录里(所以说你可以自己clone然后扔进来就可以)
删除插件
删除插件,只需要将写在 .vimrc 配置文件内的插件删除,重启 vim 并执行命令 :PlugClean 即可:
call plug#begin('~/.vim/plugged')
call plug#end()
保存在 vim 中使用 :PlugClean
外观
seoul256配色
Windows必装
这里有很多方案 https://zhuanlan.zhihu.com/p/58188561
我选了一个seoul256方案,地址是 https://github.com/junegunn/seoul256.vim
同样作为插件安装
Plug 'junegunn/seoul256.vim'
执行安装之后能在插件目录中看到(图片是vscode配色的示例)
.vimrc文件中设置主题,它的主题名字是dark_plus(图片是vscode配色的示例)
colorscheme dark_plus
indentLIne缩进线
括号高亮
https://github.com/luochen1990/rainbow
用着还不错
vim-airline 状态条
powerline已经停止更新,airline继任
https://github.com/vim-airline/vim-airline
可以与其他插件整合:
代码补全
coc.nvim
https://github.com/neoclide/coc.nvim
太好用了,比youcompleteme方便多了
https://github.com/neoclide/coc.nvim
coc.nvim与其他vim插件不一样,他需要额外的服务程序,服务程序是用node写的,先安装node
curl -sL install-node.vercel.app/lts | bash
然后去.vimrc
安装coc.nvim
" Use release branch (recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
执行:PlugInstall
在vim中输入如下命令确认安装完成
:CocInfo
clangd
coc.nvim只能算作一个插件管理器,需要安装c语言/c++语言服务器,这里用的是clangd
,可以直接在vim里安装:
CocInstall coc-clangd
如果通过上述命令安装clangd失败(通常是网络环境的问题),可以去 https://github.com/clangd/clangd/releases 直接下载二进制文件
比如linux系统可以下载后解压到/usr/local/
:
kun in /usr/local/clangd-linux-15.0.3 $ ll
总计 16K
drwxr-xr-x. 1 kun kun 12 11月18日 23:58 bin
drwxr-xr-x. 1 kun kun 10 11月18日 23:58 lib
-rw-r--r--. 1 kun kun 15K 10月18日 22:37 LICENSE.TXT
然后在/usr/bin/
创建一个软连接:
kun in /usr/bin $ sudo ln -s ../local/clangd-linux-15.0.3/bin/clangd clangd
kun in /usr/bin $ ll ./clangd
lrwxrwxrwx. 1 root root 39 11月19日 00:00 ./clangd -> ../local/clangd-linux-15.0.3/bin/clangd
注意:这里和最新的安装方式可能会有区别,具体参考github链接
https://github.com/neoclide/coc.nvim
在.vimrc
中配置Tab键和Enter键作为补全:
inoremap <silent><expr> <Tab> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"
默认通过快捷键ctrl p触发补全
函数参数的嵌入提示
英文名叫:Inlay Hint
样子如下图灰色背景的x: y: &in:
等符号:
这不是实际代码,看着影响观感,临时修改可以在vim里通过如下命令切换:
CocCommand document.toggleInlayHint
所有的coc-nvim配置可以在 https://github.com/neoclide/coc.nvim/blob/7c6db7546dfa29f1167c53111a00abac4e86e383/doc/coc-config.txt 查到
临时修改仅仅针对此次使用,Inlay Hints默认是打开的,下次打开vim还会启用,永久关闭可以在coc-nvim的配置文件里修改。
vim里执行:CocConfig
打开coc的配置文件,添加:
{
"inlayHint.enable":false
}
lsp
coc.nvim有点像套娃,可以理解为在vim上装一个插件,这个插件是一个应用商店(有点像油猴)
clangd 是coc.nvim中安装的插件,用于代码补全。coc.nvim支持的插件在npm中可以搜到 https://www.npmjs.com/search?q=keywords%3Acoc.nvim
当然也可以安装其他功能的插件,比如高亮 https://github.com/neoclide/coc-highlight
文件跳转 函数跳转等其他功能
leaderF
ctrlp明显不如这个,不再使用;leaderF需要vim支持python,vim --version
确认python前边带加号,然后在vim中echo has("python3")
得到1,或者vim中py3 print("hello")
能准确地道输出,才能确保leaderF装完之后能正常运行。
下面正式开始
https://github.com/Yggdroot/LeaderF
noremap <C-O> :LeaderfFunction!<CR>
我定义为ctrl + shift + o
快捷键打开,打开后的样子:
命令后加一个叹号会进入 normal 模式,就跟tagbar一样,除了上下键选择外,Vim的各种跳转和搜索命令都可以始用,回车就跳转过去。对于大点的文件,用 tagbar 上下翻页找名字是件挺痛苦的事情。而在 LeaderfFunction 的浏览模式中,按 i (Tab键也可以)进入模糊匹配模式,输入文件名搜索(按 TAB切换回来)
作者:韦易笑
链接:https://www.zhihu.com/question/31934850/answer/379725837
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
还可以打开文件,类似于ctrlp;也可以打开buffer
https://zhuanlan.zhihu.com/p/29137923
leaderF支持的一些操作(从help中复制)
:LeaderfFile [directory] or |<leader>|f *LeaderfFile*
Launch LeaderF to search files.
:LeaderfBuffer or |<leader>|b *LeaderfBuffer*
Launch LeaderF to search buffers.
:LeaderfBufferAll *LeaderfBufferAll*
Same as LeaderfBuffer, except that the unlisted buffers are shown.
:LeaderfMru *LeaderfMru*
Launch LeaderF to search Mru.
:LeaderfMruCwd *LeaderfMruCwd*
Launch LeaderF to search Mru in current working directory.
:LeaderfTag *LeaderfTag*
Launch LeaderF to navigate tags.
列出tag,包括函数、变量、命名空间等
:LeaderfBufTag *LeaderfBufTag*
Launch LeaderF to navigate tags in current buffer.
列出当前文件的所有tag,包括函数、变量、命名空间等,类似于vscode的ctrl+shift+o
:LeaderfBufTagAll *LeaderfBufTagAll*
Launch LeaderF to navigate tags in all listed buffers.
列出当前已经打开的所有文件的所有tag,包括函数、变量、命名空间等
:LeaderfFunction *LeaderfFunction*
Launch LeaderF to navigate functions or methods in current buffer.
:LeaderfFunctionAll *LeaderfFunctionAll*
Launch LeaderF to navigate functions or methods in all listed buffers.
:LeaderfLine *LeaderfLine*
Launch LeaderF to search a line in current buffer.
:LeaderfLineAll *LeaderfLineAll*
Launch LeaderF to search a line in all listed buffers.
:LeaderfHistoryCmd *LeaderfHistoryCmd*
Launch LeaderF to execute the command in the history.
:LeaderfHistorySearch *LeaderfHistorySearch*
Launch LeaderF to execute the search command in the history.
:LeaderfSelf *LeaderfSelf*
Launch LeaderF to execute the commands of itself.
:LeaderfHelp *LeaderfHelp*
Launch LeaderF to navigate the help tags.
:LeaderfColorscheme *LeaderfColorscheme*
Launch LeaderF to switch between colorschemes.
:LeaderfFiletype *LeaderfFiletype*
Launch LeaderF to navigate the filetype.
:LeaderfCommand *LeaderfCommand*
Launch LeaderF to execute user-defined/built-in Ex commands.
:LeaderfWindow *LeaderfWindow*
Launch LeaderF to search windows.
:LeaderfQuickFix *LeaderfQuickFix*
Launch LeaderF to navigate the quickfix.
:LeaderfLocList *LeaderfLocList*
Launch LeaderF to navigate the location list.
:LeaderfRgInteractive *LeaderfRgInteractive*
Launch LeaderF to use rg interactively.
:LeaderfRgRecall *LeaderfRgRecall*
Recall last search of rg.
非常有用的是:
全局搜索
leaderf支持全局搜索,类似于vscode的ctrl shift f
依赖于ripgrep,需要系统中提前安装,debian系sudo apt install ripgrep
, 红帽系sudo dnf install ripgrep
.vimrc
中配置成快捷键nnoremap <leader>rg :Leaderf rg<CR>
ctags
这是个工具软件,不是插件。LeaderF有几个功能是依赖ctags的
ctags -R .
Ctrl+]
跳转到定义
Ctrl+o
回到上一个位置
不安装python3可能出现这个问题:
Leader requires Vim compiled with python and/or a compatible python version.
这是因为vim没有找到python导致的,vim中输入:python3 print('Hello')
会提示缺少哪个版本的python,比如我的是缺少python39
windows下的gvim我是按照如下方式解决的
去python官网下载32/64对应的python,比如我的是python39 Windows embeddable package (32-bit)
下载后解压,把解压后的内容全部拷贝到vim安装目录下(与vim.exe同目录)即可。之所以这样是为了让这份python只给vim用,我的系统还有其他版本的python。
windows msys2的vim
msys2的vim是msys工具链编译得到的,需要msys工具链编译的python。
按照下面这样的操作安装
pacman -S vim python
然后在vimrmc里添加(注意dll文件的版本号):
# 这里用set不起作用,不知道为什么
let &pythonthreedll='/usr/bin/msys-python3.11.dll'
tagbar
https://github.com/preservim/tagbar
默认会在右边显示变量函数等,作为leaderF的辅助,暂时还在用
tagbar依赖ctags,Ubuntu直接用sudo apt install ctags
即可;
debian需要sudo apt install universal-ctags
vim-surround 和 wildfire
回车选中代码块,类似vi}这种操作,对{('"
等符号都适用
https://github.com/tpope/vim-surround
选中后按下S"
即可用"
把选中的文字包裹起来,对各种字符都适用,注意S是大写
https://github.com/gcmt/wildfire.vim
这两个插件从b站up那里听到的
https://www.bilibili.com/video/BV1KT4y1c78p
安装就把下面放到#begin
和#end
之间
Plug 'tpope/vim-surround'
Plug 'gcmt/wildfire.vim'
文件树结构
还在用nerdtree,有新的替代品还没用
https://github.com/Shougo/defx.nvim
其他
Manjaro下让vim支持clipboard
使用命令vim --version | grep "clipboard"
来查看是否支持clipboard,如若看到-clipboard
就是不支持,如果看到+clipboard
就是支持。
如果是不支持那就使用sudo pacman -S gvim
安装gui版本的vim。
复制到系统剪切板的命令是:"+y
注意那个加号是真的要输入的+, 粘贴系统剪贴板的命令是在insert模式下shift insert
或者ctrl shift v
。
Windows下让vim支持clipboard
MSYS2安装的vim:pacman -S vim
,安装后vim --version | grep "clipboard"
发现直接能看到+clipboard
。
MSYS2的使用参考另外的文章:https://www.cnblogs.com/feipeng8848/p/10038421.html
直接下载Windows版本的gvim更方便,修改vim安装目录下的_vimrc
文件即可配置vim
Ubuntu 支持clipboard
sudo apt install vim-gtk3
Fedora 36支持clipboard
sudo dnf install vim-X11
启动的时候用命令 vimx
代替 vim
关于Windows版本vim
有如下几种安装方式:
- gvim
- mingw64
- msys2
- cygwin
- git(windows)
其中gvim是一个gui独立软件,其他几个则是需要通过安装宿主环境才能安装。
git下的vim特殊一些,git的$HOME
是windows系统的home,但是vim的配置文件却vimrc在git安装目录/etc/vimrc
手动编译vim-gtk
这是chatGPT给出的答案:
要手动编译Vim(带有GTK GUI支持),您需要执行一系列步骤。以下是在Linux系统上手动编译vim-gtk的大致步骤:
-
获取源代码:
首先,您需要获取Vim的源代码。您可以从Vim的官方网站(https://www.vim.org/download.php)下载最新的源代码压缩包,然后将其解压缩。 -
安装依赖:
在编译Vim之前,您需要确保系统中安装了必要的依赖项。对于基于Debian/Ubuntu的系统,您可以运行以下命令安装一些常见的构建工具和库:sudo apt-get update sudo apt-get install build-essential libgtk-3-dev python3-dev
请注意,可能还有其他依赖项,具体取决于您的系统配置和需求。
-
配置编译选项:
在终端中,切换到解压后的Vim源代码目录,并运行以下命令来配置编译选项:cd /path/to/vim/source ./configure --with-features=huge --enable-gui=gtk3 --enable-python3interp --prefix=/usr/local
这里的
--with-features=huge
将启用所有功能,--enable-gui=gtk3
将启用GTK GUI支持,--prefix=/usr/local
将指定安装目录为/usr/local
。 -
进行编译:
在配置选项完成后,运行以下命令开始编译:make
这将编译Vim。如果您的系统拥有多个处理器核心,您可以使用
-j
选项以加快编译速度,例如make -j4
。 -
安装:
编译成功后,运行以下命令进行安装:sudo make install
这将把编译后的Vim安装到指定的
--prefix
目录中(在此示例中为/usr/local
)。 -
验证安装:
安装完成后,您可以在终端中运行vim
命令来验证Vim是否已经成功编译和安装。如果一切顺利,Vim的GTK GUI版本应该能够启动。
请注意,以上步骤可能会因系统配置和版本而有所不同。在执行编译之前,请确保备份数据并了解您的操作系统的要求。如果您不确定自己在做什么,最好还是使用操作系统提供的软件包管理器来安装Vim。
记录:
一开始忘记配置python3,使用make distclean
后重新configure既可,注意这里不要用make clean
,这样不彻底