一步一步把vim打造成IDE


轉載:https://www.cnblogs.com/awakenedy/articles/9876817.html

僅供個人學習使用

vim高度的可擴展性,使其能通過插件和配置文件的相互組合,實現IDE的諸多功能:如代碼補全,函數定義跳轉,文件目錄樹,源碼的結構化瀏覽等。

本文將從零開始一步一步把vim打造成一個精簡版IDE,旨在提高linux下的開發效率以及日常運維效率,同時也想和其他的vim老司機們交流vim使用經驗。
 
若你按本文一步一步配置,將達到的最終效果如下(以python開發為例)
代碼編輯視圖:
我把該視圖的30秒演示視頻放到了b站方便展示:     https://www.bilibili.com/video/av17176370/
 
調試視圖:
把一個官方標配的vim打造成如上效果,預計花費時間:2~3小時。
本文盡可能讓讀者能理解每一行配置的含義,以便在出錯或者需要個性化定制時自行修改。
依賴:操作系統:debian8.(macOS,其他linux發行版均適用),vim版本 >= 7.3.584
 
step 0:安裝准備
    1.確定當前系統中的vim是否支持python語言特性(這是自動補全的基礎)
      vim --version
          
      如圖,若python或python3前的符號為"+",則表示當前vim支持python語言特性,可直接跳到下一步.
      若為"-",則需重新編譯安裝vim以支持python。不用擔心,vim的編譯安裝過程很友好:(以py2為例,py3同理)
      首先卸載系統自帶vim:
       apt-get remove vim
      接着安裝編譯vim時所需依賴:
       apt-get install gcc make python-dev libncurses5-dev libncursesw5-dev

      從vim官網下載vim8.0源碼並解壓:

       wget ftp://ftp.vim.org/pub/vim/unix/vim-8.0.tar.bz2
       tar -xvf vim-8.0.tar.bz2 && cd vim80/
     配置,編譯,安裝
        ./configure  --enable-pythoninterp=yes --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu ( /usr/lib/python2.7/config-x86_64-linux-gnu 換成自己的python lib的路徑)
        make && make install
                安裝成功后此時vim8.0的可執行文件路徑為:/usr/local/bin/vim   配置文件路徑為:/usr/local/share/vim
                為了在shell中直接使用vim命令,可以把 /usr/local/bin/vim做一個軟鏈到/usr/bin/vim,或者直接使用 update-alternatives 手工注冊vim80為vim默認打開程序:
        update-alternatives --install /usr/bin/vim vim /usr/local/bin/vim 1000
                此時使用vim --version能看到vim已對python提供支持
                
    
    2.安裝vim插件管理管理工具vundle
       vundle是一個基於git倉庫的vim插件管理工具,類似python的pip。
       vim啟動時,配置文件讀取順序可簡單理解為:先讀.vimrc,再載入所有vim配置文件路徑的plugin文件夾下所有.vim文件。沒有vundle之前,vim插件的安裝都是手工增刪plugin文件夾中的.vim文件,十分不方便,有了vundle之后,實現一鍵安裝和卸載,還提供如插件搜索等高級功能。了解vundle詳細功能和原理參考:  https://github.com/VundleVim/Vundle.vim
       首先下載vundle到當前用戶家目錄
                   git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 
       在~/.vimrc中添加如下配置(注:vimrc文件的注釋為雙引號")
                   set nocompatible " 去除對vi的兼容 filetype off " 關閉文件類型檢測 set rtp+=~/.vim/bundle/Vundle.vim " 設置vundle路徑
call vundle#begin() " 插件管理函數開始 Plugin 'VundleVim/Vundle.vim' " 在此添加需要安裝的插件列表,格式 Plugin 'git用戶/git倉庫' 或者 Plugin '協議://git url' " 例如: " Plugin 'https://github.com/davidhalter/jedi-vim.git' " Plugin 'rstacruz/sparkup' call vundle#end() " 插件管理函數結束 filetype plugin indent on " 必須,作用未知

       至此准備工作全部完畢,后續統一使用vundle來安裝所需插件

step 1:顯示文件目錄樹和多書簽文件編輯 
    這一步將使用 NERDTree插件,來實現在vim顯示文件目錄樹的功能,如圖
    1.在~/.vimrc中的插件管理函數之間添加一行:
              call vundle#begin() ... Plugin 'https://github.com/scrooloose/nerdtree.git' ... call vundle#end() 

    2.打開vim,鍵入vim命令 :BundleInstall

         此時vundle會列出當前已安裝和未安裝的插件列表,並從上到下依次自動安裝:
               
         當對應插件前的符號變成+時,代表插件安裝完畢
    3.在~/.vimrc中添加如下針對nerdtree的配置:
            "NERDTree config map <F4> :NERDTreeToggle<CR> " F4一鍵開關目錄樹 autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") &&b:NERDTreeType == "primary") | q | endif " 當目錄樹窗口為最后一個窗口時自動退出vim
    4.使用nerdtree
        重新打開vim讓配置文件生效,敲F4,則會彈出文件目錄樹窗口,該窗口顯示當前路徑下的文件和文件夾,目錄樹中通過上下鍵移動,敲回車展開折疊文件夾以及打開對應文件,敲ctrl+w+w讓光標自動在目錄樹窗口和文件編輯窗口自動切換
        nerdtree的快捷鍵非常多,以下為我最常用的
            o       在已有窗口中打開文件,並跳到該窗口
            go        在已有窗口中打開文件,但不跳到該窗口
            t       在新 書簽 中打開選中文件,並跳到新 書簽
            T       在新 書簽 中打開選中文件,但不跳到新 書簽
            gT        切換到下一個書簽
            gt        切換到上一個書簽
           :tabc       關閉當前的書簽
        更多快捷鍵可參考 http://yang3wei.github.io/blog/2013/01/29/nerdtree-kuai-jie-jian-ji-lu/
 
step 2:自動補全和"跳轉至定義"功能
    傳統的vim自動補全使用的是ctags,以及vim自帶快捷鍵ctrl+p基於上下文自動補全.ctags通過掃描工作路徑生成.tags文件,在vim運行時引入對應的.tags文件便可實現補  全.
    后來出現一個大名鼎鼎的補全工具 YouCompleteMe(下文簡稱YCM),堪稱媲美vs的自動補全效果,足見其強大。默認支持語言:c,c++,obj-c,c#,python。 對於其他的語言,會調用vim設置的  omnifunc 來匹配,因此同樣支持  php ,  ruby 等語言。但YCM的安裝十分困難和折騰,他並不是一個簡單的.vim文件, 而是需要編譯成可執行文件后再安裝,並且整合了多種vim插件。我花了一天時間終於找到了一個靠譜的安裝路線(redhat,debian主流版本測試均通過):
      1.安裝依賴
                sudo apt-get install build-essential cmake python-dev python3-dev
      2.在~/.vimrc中的插件管理函數之間添加一行: 
                Plugin 'https://github.com/Valloric/YouCompleteMe.git'

      3.同上一步,打開vim,鍵入 :BundleInstall

           這個時候可能等的時間會相當的長,因為YCM足足有240MB大。
          此時安裝完畢后,vim狀態欄可能會顯示:
          The ycmd server SHUT DOWN (restart with ':YcmRestartServer'). YCM core library not detected; you need to compile YCM before using   it.              Follow the instructions in the documentation. 
          提示你需要手工編譯, 這個報錯直接忽視
      4.進入YouCompleteMe的下載路徑,執行YCM自帶安裝腳本
                cd  ~/.vim/bundle/YouCompleteMe
                chmod a+x install.sh && ./install.sh (此處若要YCM支持C,C++補全,添加安裝參數  ./install.sh --clang-completer 此時會調clang自動安裝)
          如圖,只要提示進度到達100%中途未自動退出,則YCM至此安裝完成

 

    使用vim打開python文件,驗證YCM是否生效:
   
          可見最初始的補全背景色為紫紅色,顯得非常突兀,並且補全后會自動彈一個窗口,里面是當前補全類型的說明,非常蛋疼,於是我們在vimrc中加入如下配置來優化 YCM:
                         "ycm
                         set completeopt=longest,menu " 取消補全后的彈窗
                         highlight Pmenu ctermfg=15 ctermbg=0 guifg=#000000 guibg=#111100 " 把補全背景色換成當前vim的背景色

          此時效果如下

        
        光標定位到任意函數,變量或類,鍵入vim命令:YcmCompleter GoTo,可跳轉至其定義處(python的系統函數/類暫不支持),我們把跳轉至定義功能綁定到<F6>快捷鍵,打開~/.vimrc,添加一行配置
                         map <F6> :YcmCompleter GoTo<CR>

       此時按下F6后可直接跳轉到定義. 跳轉至定義后如何跳轉回去? ctrl+o

 
step 3:源碼的結構化瀏覽功能(可選)
    使用taglist插件 可將源碼中定義的類、函數、變量等以樹結構顯示,一目了然,方便快速定位。
     
    taglist的安裝和配置網上相關實現方案,這里不再贅述。可參考  Vim中配置Taglist插件
 
step 4:調試(可選)
   使用vim調試代碼本質上是利用了vim的窗口多開特性,然后把調試器的信息分類輸出到各個窗口,來達到類似IDE的效果。
   感興趣的同學可以嘗試用vim script來手工實現調試環境,這里使用vim的 DBGPavim 插件來實現在vim中調試python。關於該插件的原理可參考  https://github.com/brookhong/DBGPavim.git ,安裝步驟如下:
   1.安裝DBGPavim,同上,在~/.vimrc中的插件管理函數之間添加一行:
                Plugin 'https://github.com/brookhong/DBGPavim.git'

    打開vim,鍵入 :BundleInstall等待安裝完成,安裝完畢后在~/.vimrc中增加如下配置:

                let g:dbgPavimPort = 9009

   這里的Port就是DBGPavim要監視的端口,要與調試器的端口一致,默認是9000。 

   2. 下載vim專用python調試器pydbgp
   可以從  這里下載pydbgp對應不同平台的可執行文件,下載完畢后解壓到當前路徑:
               tar -zxvf Komodo-PythonRemoteDebugging-11.0.1-90797-linux-x86_64.tar.gz && cd Komodo-PythonRemoteDebugging-11.0.1-90797-linux-x86_64
   結果如下:
    
   接着把文件夾中的pydbgp移動到pythonlib文件夾下,否則后面會報錯dbgpClient缺失
               cp pydbgp pythonlib/

   最后把pydbgp加入環境變量,方便vim調用。(若覺得該調試功能好用,可把該環境變量永久生效)

              export PATH=$PATH:~/Komodo-PythonRemoteDebugging-11.0.1-90797-linux-x86_64/pythonlib
   3. 在vim中使用pydbgp調試python代碼
   用vim打開python文件,敲F5讓vim進入調試模式,此時若看到右下角顯示bap-LISN-9009,則說明DBGPavim安裝成功,表示正在監聽9009端口,等待pydbgp傳遞調試信息。
此時在需要設置斷點的行敲F10,該行頭部變為綠色,表示下斷點成功:
        
   調試工作准備完畢,此時鍵入vim命令 :Dp,此時后台會啟動pydbgp調試當前python文件,並向9009端口傳遞調試信息,再按F5,會自動跳轉到調試界面,類似文章開頭的調試視圖。
   進入調試視圖后,則可以像IDE一樣,使用步進,步出,監視當前環境變量,跳轉到下一個斷點等功能,操作方法如下:
         F5 啟動調試監聽 F6 停止調試監聽 F1 打開或關閉幫助窗口 F2 單步進入 F3 單步跳過 F4 單步退出 F5 繼續執行直到下一個斷點,如果后續沒有斷點就退出調試模式。 F9 最大化某個子窗口,或者重置窗口布局。 F11 查看當前執行環境下的所有變量的值,在不同的堆棧層次,會有不同的結果。 F12 查看光標下的變量的值。
   調試模式下的快捷鍵,和vim normal模式下的快捷鍵不沖突,十分省心。
 
至此一個精簡版的IDE已打造完畢,可能有的同學會發現與一個完整的IDE相比還有一些缺失的重要功能:代碼折疊
代碼折疊其實是一個vim的內建功能,可根據所用編程語言自定義折疊規則,使用起來也是十分方便,可參考vim中文文檔中  代碼折疊章節
 
 
附錄:
  1.針對上述配置的一個完整.vimrc文件   vimrc示例.txt
  2.關於YCM補全C,C++代碼的補充說明:
      安裝YCM時若開啟了C,C++支持,安裝完畢后打開.c或.cpp文件發現並不生效,原因c標准庫中的頭文件未加入到YCM的補全搜索范圍,解決方法:
      在 ~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py 文件中進行配置,在 flag 列表中如下:

      '-isystem',
      '/usr/include',
      '-isystem',
      '/usr/include/c++/4.9.2',
      '-isystem',
      '/usr/include',
      '/usr/include/x86_64-linux-gnu/c++',

      最后在~/.vimrc中添加一行

              let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

     重新打開vim,問題解決


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM