配置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的大致步骤:

  1. 获取源代码
    首先,您需要获取Vim的源代码。您可以从Vim的官方网站(https://www.vim.org/download.php)下载最新的源代码压缩包,然后将其解压缩。

  2. 安装依赖
    在编译Vim之前,您需要确保系统中安装了必要的依赖项。对于基于Debian/Ubuntu的系统,您可以运行以下命令安装一些常见的构建工具和库:

    sudo apt-get update
    sudo apt-get install build-essential libgtk-3-dev python3-dev
    

    请注意,可能还有其他依赖项,具体取决于您的系统配置和需求。

  3. 配置编译选项
    在终端中,切换到解压后的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

  4. 进行编译
    在配置选项完成后,运行以下命令开始编译:

    make
    

    这将编译Vim。如果您的系统拥有多个处理器核心,您可以使用-j选项以加快编译速度,例如make -j4

  5. 安装
    编译成功后,运行以下命令进行安装:

    sudo make install
    

    这将把编译后的Vim安装到指定的--prefix目录中(在此示例中为/usr/local)。

  6. 验证安装
    安装完成后,您可以在终端中运行vim命令来验证Vim是否已经成功编译和安装。如果一切顺利,Vim的GTK GUI版本应该能够启动。

请注意,以上步骤可能会因系统配置和版本而有所不同。在执行编译之前,请确保备份数据并了解您的操作系统的要求。如果您不确定自己在做什么,最好还是使用操作系统提供的软件包管理器来安装Vim。

记录:
一开始忘记配置python3,使用make distclean后重新configure既可,注意这里不要用make clean,这样不彻底

posted @ 2019-07-06 11:29  feipeng8848  阅读(2617)  评论(0编辑  收藏  举报