VIM使用系列:縮進調整、自動補全、摺疊、跳轉

縮進調整、自動補全、摺疊、跳轉這些vim操做都是一開始我也不會,在項目開發過程當中熟悉掌握的,本文主要記錄一下這些操做的命令,以及查找幫助,爲分享也爲備忘。html

縮進調整

縮進調整的幫助查找命令: :help shift-left-right,或者直接help下面縮進調整的任意一個命令。縮進調整操做的執行與vim中的shiftwidth參數的值有關係,在前文的vimrc配置文件中,已經將shiftwidth設置爲4,表示每一次縮進的寬度均爲4個空格長,能夠參照進行修改。java

如下爲經常使用的縮進快捷操做和命令:shell

  • 當前行向右縮進一次:操做 >> 或者輸入命令 :>
  • 當前行向左縮進一次:操做 << 或者輸入命令 :<
  • 從第m行起,到第n行止向右縮進一次: 輸入命令 :m,n> 等價於命令 :m>(n-m+1)
  • 從第m行起,到第n行止向左縮進一次: 輸入命令 :m,n< 等價於命令 :m<(n-m+1)
  • 從第m行起共n行向右縮進一次: 輸入命令 :m>n 等價於命令 :m,m+n-1>
  • 從第m行起共n行向左縮進一次: 輸入命令 :m<n 等價於命令 :m,m+n-1<

自動補全

在windows中使用SourceInsight工具編輯代碼時,函數、變量的自動補全功能是很強大、很受歡迎的,能夠大大地提升工做效率。在vim中也有同樣的功能,也許沒有那麼方便,稍微須要增長一些按鍵(可能須要本身進行一點複雜的設置也能夠實現SourceInsight的自動彈出),可是也足夠使用了。vim

自動補全能夠簡單地分爲兩塊:單詞的自動補全 和 程序代碼中符號、函數的自動補全,從本質上來講都是基於單詞的補全,可是代碼中的補全有其特殊性,主要是結構成員的補全這裏。所以二者的操做命令也就稍有不一樣。windows

  • 單詞自動補全:在inset模式下按以下組合鍵,ctrl+x ctrl+n 或者 ctrl+x ctrl+p函數

    或者直接按組合鍵ctrl+n 或 ctrl+p,前者將列出當前緩衝中符合的條件的詞,然後者還將包括字典中的符合條件的詞。查看詳細幫助::help ^x^n工具

  • 代碼自動補全:在inset模式下按以下組合鍵,ctrl+x ctrl+o,查看詳細幫助: :help ^x^oui

    代碼的自動補全環境要求稍微複雜一點。調試

    首先,它使用的補全叫Omni Completion, 這裏涉及到vim中變量omnifunc的設置,這進一步就涉及到文件類型的識別、關聯。所以第一步是須要打開vim中的文件類型自動檢測,在前面的vimrc配置文件中已經設置了,即: filetype on。vim中默承認以識別很多文件類型,如:C語言的源文件、java程序文件、html程序文件等等,也就會自動根據文件類型設置omnifunc的值。code

    其次,omni補全須要使用tags文件中的信息來實現,並且最好是Exuberant Ctags工具(第一文中的ctags工具)生成的tags文件,所以第二步就是安裝該工具,並使用它生成項目的tags文件(參考第二文中的項目腳本內容)。

    最後,omni補全由於使用tags中的信息實現,所以只能對代碼中的全局變量、全局類型、函數、結構成員、類成員進行補全,而不能對代碼中的局部變量進行補全,局部變量的補全使用上面的單詞補全方式實現。

    補充:項目開發中都會使用不少的C標準函數、系統調用等,而包含這些函數的頭文件並無被包含在tags文件中,也就不會提示自動補全,爲了提升效率實現更全面的自動補全,能夠把標準函數、系統函數的tags補充到vim中,方法是先創建系統頭文件的tags文件,而後添加到vimrc配置文件中,以下:

    <!-- lang: shell -->
     ctags -R -f ~/.vim/systags /usr/include /usr/local/include

    而後將 set tags+=~/.vim/systags 設置添加到第二文中的.vimrc配置文件中。這樣不只是補全更高效,並且也是跳轉更全面。

  • 從補全列表中選擇,向下移動:ctrl+n ,向上移動:ctrl+p,而後按任意鍵結束補全,注意這個鍵仍是會被輸入,因此好的選擇是按空格鍵。

若是補全處於激活狀態,能夠用」CTRL-E「中止補全並回到原來錄入的文字;用」CTRL-Y「能夠中止補全,並接受當前所選的項目。

摺疊

代碼的摺疊,能夠方便掌控程序的主要邏輯,也便於代碼的閱讀、查找。使用摺疊,首先要設置摺疊方式,即設置vim中fdm(foldmethod的縮寫)的值,在系列第二文的配置文件中已經將fdm設置爲indent,即依據代碼的縮進進行自動摺疊。vim中有六種fdm能夠設置,參考詳細幫助: :help fold。經常使用的摺疊打開、關閉操做以下:

  • 摺疊代碼: 快捷按鍵 zc
  • 遞歸摺疊代碼: 快捷按鍵 zC
  • 取消代碼摺疊: 快捷按鍵 zo
  • 遞歸取消折疊代碼: 快捷按鍵 zO
  • 摺疊文件中的全部代碼: 快捷按鍵 zM
  • 取消文件中全部代碼的摺疊: 快捷按鍵 zR
  • 對第m行到第n行進行摺疊: 打開摺疊,使用命令: :m,nfoldopen, 關閉摺疊,使用命令: :m,nfoldclose
  • 在摺疊代碼中的上下移動: 在打開的摺疊中:[z ]z 在關閉的摺疊中:zj zk (一試便知)

跳轉

在SourceInsight中想要跳轉到某個函數,只須要按住shift鍵,而後點擊鼠標左鍵就能夠了,在vim中一樣很簡單快速,直接按組合鍵ctrl_]就能夠了,固然前提條件是已經生成了tags文件,並設置好了。查看詳細的幫助::help ^]。

  • 跳轉到函數、全局結構、全局變量等tag: 組合鍵 ctrl_]
  • 從tag處返回跳轉的位置:組合鍵 ctrl_t
  • 跳轉到全局變量處: 快捷鍵 gD
  • 跳轉到局部變量處: 快捷鍵 gd
  • 返回到上一個操做位置(上一次光標位置): 組合鍵 ctrl_o
  • 返回到下一個操做位置(更新的光標位置): 組合鍵 ctrl_i

原本打算把quickfix的操做也放到本文的,可是寫本文已經花了將近一個半小時了,那就放到系列的下一篇文章來寫吧,恰好quickfix也是vim中與文本編輯、代碼編輯關係不大的一部分,主要是涉及到代碼的編譯、調試,大大提升編譯-改錯-編譯流程的效率,也算是vim的一大特點功能,所謂的劍不離手,我一直以爲在SourceInsight中不能直接進行編譯是一大遺憾,這個遺憾在vim中獲得了彌補,哈哈。

相關文章
相關標籤/搜索