gvim+tmux 和vscode+neovim 的ide 模式

hegangben
2025-10-10 / 1 评论 / 2 阅读 / 正在检测是否收录...

vscode 界面
mi3xid5o.png

安装的插件:
mi3xnf1u.png
mi3xnrj3.png

vscode+neovim 设置参考这篇文档:
http://bennyhe.cn/index.php/archives/327/

gvim 的界面:
mi3xsq3g.png

常用功能都有,文件浏览、语法高亮、彩虹括号、括号自动补齐、输入关键词提示,ctag 函数跳转、文档状态、多terminal(tmux)集成等等常用功能。

terminal界面采用tmux,配合clipper 工具可以和gvim 文本窗口互相粘贴,可以分页多个terminal。
gvim 按照的插件
~/.vim/ 下文件夹结构
mi3xtmzz.png

~/.vim/ 下文件(插件)
acp.vim
auto-pairs.vim
grep.vim
mark.vim
NERD_tree.vim
scala.vim
Tabular.vim
verilog_systemverilog.vim
vtreeexplorer.vim
airline.vim
ctrlp.vim
marksbrowser.vim
matchit.vim
rainbow_parentheses.vim
showmarks.vim
taglist.vim
visual-increment.vim

~/.vimrc 文件如下:

if v:version >= 900
  set scroll=1
  let g:airline_scroll_size = 1 " 覆盖插件默认值
endif
set number
syntax on
set showmode
set showcmd
set hlsearch

set autoindent
set smartindent
set cindent
set ts=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
set tabstop=4

set cursorline
set cursorcolumn
set lines=35 columns=100
set ruler
set showmatch
set wrap

noremap <C-S-A> gggH<C-O>G
inoremap <C-S-A> <C-O>gg<C-O>gH<C-O>G
cnoremap <C-S-A> <C-C>gggH<C-O>G
onoremap <C-S-A> <C-C>gggH<C-O>G
snoremap <C-S-A> <C-C>gggH<C-O>G
xnoremap <C-S-A> <C-C>ggVG
noremap <C-S>        :update<CR>
vnoremap <C-S>        <C-C>:update<CR>
inoremap <C-S>        <Esc>:update<CR>gi
if has("clipboard")
    " CTRL-X and SHIFT-Del are Cut
    vnoremap <C-A-X> "+x
    vnoremap <S-Del> "+x

    " CTRL-C and CTRL-Insert are Copy
    vnoremap <C-A-C> "+y
    vnoremap <C-Insert> "+y

    " CTRL-V and SHIFT-Insert are Paste
    map <C-A-V>        "+gP
    map <S-Insert>        "+gP

    cmap <C-A-V>        <C-R>+
    cmap <S-Insert>        <C-R>+
endif

"source $VIMRUNTIME/mswin.vim
behave mswin
set guifont=Monospace\ 14
set linespace=4
colorscheme evening

"unmap <C-V>
"unmap <C-A>
"unmap <C-C>
"unmap <C-X>

" copy paste
map <C-Insert> "+y
map <S-Insert> "+gP

"Mouse could be controled when INSERT model
set mouse=a
set selection=exclusive
set selectmode=mouse,key

"=============================
" showmarks setting
"=============================
" Enable ShowMarks
let showmarks_enable = 1
" Show which marks
let showmarks_include = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
" Ignore help, quickfix, non-modifiable buffers
let showmarks_ignore_type = "hqm"
" Hilight lower & upper marks
let showmarks_hlline_lower = 1
let showmarks_hlline_upper = 1
hi ShowMarksHLl ctermbg=Yellow   ctermfg=Black  guibg=#FFDB72    guifg=Black
hi ShowMarksHLu ctermbg=Magenta  ctermfg=Black  guibg=#FFB3FF    guifg=Black

"=============================
" markbrowser setting
"=============================
nmap <silent> <leader>mk :MarksBrowser<cr>


"Config for treeExplorer plugin
let g:treeExplVertical=0
let g:treeExplDirSort=1
let g:treeExplWinSize=20
nmap vt :VSTreeExplore<cr>

set autoread
nmap <S-F> :call Verilog_format()<cr>
function! Verilog_format()
    :w
    :silent execute '!~/.vim/tool/verible-verilog-format --column_limit=120 --indentation_spaces=4 --assignment_statement_alignment=align --named_port_alignment=align  --port_declarations_alignment=align --module_net_variable_alignment=align --distribution_items_alignment=align --formal_parameters_indentation=indent --port_declarations_right_align_packed_dimensions=true --port_declarations_right_align_unpacked_dimensions=true --inplace=true --verify_convergence=true' expand('%:p')
endfunction

"ctrlp
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlP'

"Grep hot key
nnoremap <silent><C-F> :Grep -r<CR>

"filetype, 'indent on' is necessary for smartindent
filetype on
filetype plugin on
filetype indent on

"header
nmap <C-H> :call AddHeader()<cr>
function! AddHeader()
    call append(0, '///////////////////////////////////////////////////////////////////')
    call append(1, '//copyright   : Copyright © 2019-2023 INNOSTAR. All rights reserved')
    call append(2, '//project name: demo')
    call append(3, '//file name   : '.expand('%:t'))
    call append(4, '//author      : bennyhe')
    call append(5, '//abstraction : ')
    call append(6, '//date        : '.strftime('%Y-%m-%d %H:%M:%S'))
    call append(7, '//version     : 2.0')
    call append(8, '//platform    : SuperBench 2.0')
    call append(9, '//history     : created by bennyhe @'.strftime('%Y-%m-%d %H:%M:%S').expand(' v2.0'))
    call append(10, '///////////////////////////////////////////////////////////////////')
endfunction


"function
nmap <C-L> :call AddFunction()<cr>
function! AddFunction()
    call append(line(".")-1, '    /*****************************************************************')
    call append(line(".")-1, '    *')
    call append(line(".")-1, '    *****************************************************************/')
endfunction

set tags=tags;
set tags+=~/.vim/tags/tags;
set tags+=~/.vim/tags/tags_uvm;
set tags+=~/.vim/tags/tags_vip;
set autochdir

"config for tlist plugin
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
let Tlist_Use_Right_Window=0
let Tlist_Max_Tag_Length=1
let g:Tlist_Compact_Format=1
"let g:Tlist_WinHeight=5
let g:Tlist_WinWidth=15
let g:Tlist_Use_Horiz_Window=0
let g:Tlist_Show_One_File=1
"let g:Tlist_Exit_OnlyWindow=1
nmap tl :Tlist<cr>

"terminal
noremap <F8> :close!<cr> 
noremap <S-M-p> :sp<cr>
noremap <S-M-q> :vs<cr>
"noremap <F3> :belowright term ++rows=5 d:\msys64\msys2_shell.cmd -msys -defterm -no-start <cr>
noremap <F3> :belowright term ++rows=5 powershell ubuntu2204.exe<cr>
noremap <F4> :belowright term ++rows=5 powershell<cr>
let b:match_words='\<begin\>:\<end\>'

let g:rbpt_colorpairs = [
    \ ['brown',       'RoyalBlue3'],
    \ ['Darkblue',    'SeaGreen3'],
    \ ['darkgray',    'DarkOrchid3'],
    \ ['darkgreen',   'firebrick3'],
    \ ['darkcyan',    'RoyalBlue3'],
    \ ['darkred',     'SeaGreen3'],
    \ ['darkmagenta', 'DarkOrchid3'],
    \ ['brown',       'firebrick3'],
    \ ['gray',        'RoyalBlue3'],
    \ ['black',       'SeaGreen3'],
    \ ['darkmagenta', 'DarkOrchid3'],
    \ ['Darkblue',    'firebrick3'],
    \ ['darkgreen',   'RoyalBlue3'],
    \ ['darkcyan',    'SeaGreen3'],
    \ ['darkred',     'DarkOrchid3'],
    \ ['red',         'firebrick3'],
    \ ]
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0

""update ctags
nmap <F10> :call UpdateCtags()<CR>
function! UpdateCtags()
    let curdir=getcwd()
    while !filereadable("./tags")
        cd ..
        if getcwd() == "/"
            break
        endif
    endwhile
    if filewritable("./tags")
        silent !ctags -R --file-scope=yes --languages=systemverilog --links=yes --fields=+iaS --extra=+q
        TlistUpdate
    endif
    execute ":cd " . curdir
endfunction
nmap <F11> :call UpdateCtags_vip()<CR>
function! UpdateCtags_vip()
    silent !ctags -R --languages=systemverilog -f ~/.vim/tags/tags_vip /data/ver/powervip/v2_0/
endfunction
"autocmd BufWritePost *.sv,*.svh,*.v call UpdateCtags()


"auto exce
"set lines=999 columns=999
augroup initial
   autocmd!
   "autocmd VimEnter * VSTreeExplore
   "autocmd VimEnter * bo terminal ++rows=5
   autocmd VimEnter * wincmd k
   autocmd VimEnter * Tlist
   autocmd VimEnter * wincmd h
   autocmd VimEnter * sp
   autocmd VimEnter * VSTreeExplore
   autocmd VimEnter * wincmd l
   autocmd VimEnter * q
   autocmd VimEnter * wincmd l
   au VimEnter * RainbowParenthesesToggleAll
   au Syntax * RainbowParenthesesLoadRound
   au Syntax * RainbowParenthesesLoadSquare
   au Syntax * RainbowParenthesesLoadBraces
augroup END
":autocmd GUIEnter * VSTreeExplore

"let g:airline_powerline_fonts = 1
let g:airline_theme = 'dark'
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#show_splits = 1
let g:airline#extensions#tabline#buffer_nr_show = 0
let g:airline#extensions#tabline#buffer_idx_mode = 3
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#tab_nr_type = 1
let g:airline#extensions#branch#format =2
let g:airline_left_sep='>'
let g:airline_inactive_collapse=0
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline#extensions#tabline#buffer_idx_format = {
      \ '0': '0',
      \ '1': '1',
      \ '2': '2',
      \ '3': '3',
      \ '4': '4',
      \ '5': '5',
      \ '6': '6',
      \ '7': '7',
      \ '8': '8',
      \ '9': '9',
      \ ' ': ' '
      \}
let mapleader = "\<space>"
let g:mapleader = "\<space>"
set foldenable
set foldmethod=marker
set foldlevel=99

"" 代码折叠自定义快捷键 <leader>zz
let g:FoldMethod = 0
map <leader>zz :call ToggleFold()<cr>
fun! ToggleFold()
    if g:FoldMethod == 0
        exe "normal! zM"
        let g:FoldMethod = 1
    else
        exe "normal! zR"
        let g:FoldMethod = 0
    endif
endfun

"set nocompatible
"autocmd! bufwritepost .vimrc source %


nmap <tab> :bn<cr>
nmap <S-Tab> :bp<CR>
"nmap <leader>1 :b 1<CR>
nmap <leader>1 <Plug>AirlineSelectTab1
"{{{
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9
nmap <leader>10 <Plug>AirlineSelectTab10
nmap <leader>11 <Plug>AirlineSelectTab11
nmap <leader>12 <Plug>AirlineSelectTab12
nmap <leader>13 <Plug>AirlineSelectTab13
nmap <leader>14 <Plug>AirlineSelectTab14
nmap <leader>15 <Plug>AirlineSelectTab15
nmap <leader>16 <Plug>AirlineSelectTab16
nmap <leader>17 <Plug>AirlineSelectTab17
nmap <leader>18 <Plug>AirlineSelectTab18
nmap <leader>19 <Plug>AirlineSelectTab19
nmap <leader>20 <Plug>AirlineSelectTab20
nmap <leader>21 <Plug>AirlineSelectTab21
nmap <leader>22 <Plug>AirlineSelectTab22
nmap <leader>23 <Plug>AirlineSelectTab23
nmap <leader>24 <Plug>AirlineSelectTab24
nmap <leader>25 <Plug>AirlineSelectTab25
nmap <leader>26 <Plug>AirlineSelectTab26
nmap <leader>27 <Plug>AirlineSelectTab27
nmap <leader>28 <Plug>AirlineSelectTab28
nmap <leader>29 <Plug>AirlineSelectTab29
nmap <leader>30 <Plug>AirlineSelectTab30
nmap <leader>31 <Plug>AirlineSelectTab31
nmap <leader>32 <Plug>AirlineSelectTab32
nmap <leader>33 <Plug>AirlineSelectTab33
nmap <leader>34 <Plug>AirlineSelectTab34
nmap <leader>35 <Plug>AirlineSelectTab35
nmap <leader>36 <Plug>AirlineSelectTab36
nmap <leader>37 <Plug>AirlineSelectTab37
nmap <leader>38 <Plug>AirlineSelectTab38
nmap <leader>39 <Plug>AirlineSelectTab39
nmap <leader>40 <Plug>AirlineSelectTab40
nmap <leader>41 <Plug>AirlineSelectTab41
nmap <leader>42 <Plug>AirlineSelectTab42
nmap <leader>43 <Plug>AirlineSelectTab43
nmap <leader>44 <Plug>AirlineSelectTab44
nmap <leader>45 <Plug>AirlineSelectTab45
nmap <leader>46 <Plug>AirlineSelectTab46
nmap <leader>47 <Plug>AirlineSelectTab47
nmap <leader>48 <Plug>AirlineSelectTab48
nmap <leader>49 <Plug>AirlineSelectTab49
nmap <leader>50 <Plug>AirlineSelectTab50
nmap <leader>51 <Plug>AirlineSelectTab51
nmap <leader>52 <Plug>AirlineSelectTab52
nmap <leader>53 <Plug>AirlineSelectTab53
nmap <leader>54 <Plug>AirlineSelectTab54
nmap <leader>55 <Plug>AirlineSelectTab55
nmap <leader>56 <Plug>AirlineSelectTab56
nmap <leader>57 <Plug>AirlineSelectTab57
nmap <leader>58 <Plug>AirlineSelectTab58
nmap <leader>59 <Plug>AirlineSelectTab59
nmap <leader>60 <Plug>AirlineSelectTab60
nmap <leader>61 <Plug>AirlineSelectTab61
nmap <leader>62 <Plug>AirlineSelectTab62
nmap <leader>63 <Plug>AirlineSelectTab63
nmap <leader>64 <Plug>AirlineSelectTab64
nmap <leader>65 <Plug>AirlineSelectTab65
nmap <leader>66 <Plug>AirlineSelectTab66
nmap <leader>67 <Plug>AirlineSelectTab67
nmap <leader>68 <Plug>AirlineSelectTab68
nmap <leader>69 <Plug>AirlineSelectTab69
nmap <leader>70 <Plug>AirlineSelectTab70
nmap <leader>71 <Plug>AirlineSelectTab71
nmap <leader>72 <Plug>AirlineSelectTab72
nmap <leader>73 <Plug>AirlineSelectTab73
nmap <leader>74 <Plug>AirlineSelectTab74
nmap <leader>75 <Plug>AirlineSelectTab75
nmap <leader>76 <Plug>AirlineSelectTab76
nmap <leader>77 <Plug>AirlineSelectTab77
nmap <leader>78 <Plug>AirlineSelectTab78
nmap <leader>79 <Plug>AirlineSelectTab79
nmap <leader>80 <Plug>AirlineSelectTab80
nmap <leader>81 <Plug>AirlineSelectTab81
nmap <leader>82 <Plug>AirlineSelectTab82
nmap <leader>83 <Plug>AirlineSelectTab83
nmap <leader>84 <Plug>AirlineSelectTab84
nmap <leader>85 <Plug>AirlineSelectTab85
nmap <leader>86 <Plug>AirlineSelectTab86
nmap <leader>87 <Plug>AirlineSelectTab87
nmap <leader>88 <Plug>AirlineSelectTab88
nmap <leader>89 <Plug>AirlineSelectTab89
nmap <leader>90 <Plug>AirlineSelectTab90
nmap <leader>91 <Plug>AirlineSelectTab91
nmap <leader>92 <Plug>AirlineSelectTab92
nmap <leader>93 <Plug>AirlineSelectTab93
nmap <leader>94 <Plug>AirlineSelectTab94
nmap <leader>95 <Plug>AirlineSelectTab95
nmap <leader>96 <Plug>AirlineSelectTab96
nmap <leader>97 <Plug>AirlineSelectTab97
nmap <leader>98 <Plug>AirlineSelectTab98
nmap <leader>99 <Plug>AirlineSelectTab99
"nmap <leader>- <Plug>AirlineSelectPrevTab
"nmap <leader>+ <Plug>AirlineSelectNextTab
"}}}
0

评论 (1)

取消
  1. 头像
    hegangben 作者
    Windows 10 · Google Chrome

    gvim+tmux 和 vscode+neovim 这两套编辑器感觉各有千秋,操作方式都是vim。

    使用gvim 主要缺点是一些现代化插件比如AI 插件(不够丰富),还有word、pdf、excel 文档预览插件支持不够好,terminal 处理没有vscode 方便,尤其有历史信息往上翻时,当然也可以做得到,只不过多了两步操作,在terminal界面复制和gvim 文件界面复制,配置linux clipper 工具也可以做得到,但是也会多两步操作。好处是反应速度快,结合环境定义的环境变量,gf文件跳转特别方便。尤其是gvim 和 tmux 结合,感觉完全。

    vscode+neovim, terminal 使用很爽,插件特别多配置方便,文档预览也可以,配合AI 编程很爽。不方便的地方有时候有点卡,如果文件采用路径并且采用环境变量定义后还是需要在terminal 中nvim 打开,才能gf 跳转。

    总体来说,各有千秋。如果不卡。优先推荐vscode+neovim 这个组合。

    回复