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

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

縮進調整

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

以下爲常用的縮進快捷操作和命令:

  • 當前行向右縮進一次:操作 或者輸入命令 :>

  • 當前行向左縮進一次:操作 或者輸入命令 :<

  • 從第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的自動彈出), 但是也足夠使用了。

自動補全可以簡單地分爲兩塊:單詞的自動補全 和 程序代碼中符號、函數的自動補全,從本質上來說都是基於單詞的補全,但是代碼中的補全有其特殊性,主要是結構成員的補全這裏。因此兩者的操作命令也就稍有不同。

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

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

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

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

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

    其次,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中得到了彌補,哈哈。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章