CONAN ZONE

          你越掙扎我就越興奮

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks

          VIM 中可供用戶定制的選項非常非常多, 作為初學者, 我們沒有必要了解這么多東西。 下面, 滇狐簡單列出了一些最常用的配置項, 大家可以根據自己的需要將這些內容添加到自己的 .vimrc 中。

          1 基本設置

          • set nocp
            該命令指定讓 VIM 工作在不兼容模式下。 在 VIM 之前, 出現過一個非常流行的編輯器叫 vi。 VIM 許多操作與 vi 很相似, 但也有許多操作與 vi 是不一樣的。 如果使用“:set cp”命令打開了兼容模式開關的話, VIM 將盡可能地模仿 vi 的操作模式。
            也許有許多人喜歡“最正統的 vi”的操作模式, 對于初學者來說, vi 里許多操作是比較不方便的。
            舉一個例子, VIM 里允許在 Insert 模式下使用方向鍵移動光標, 而 vi 里在 Insert 模式下是不能移動光標的, 必須使用 ESC 退回到 Normal 模式下才行。
            再舉一個例子, vi 里使用 u 命令可以撤消一次先前的操作, 再次按下 u 時, 將撤消“撤消”這個動作本身, 也就是我們常說的“重復”(redo)。 而 VIM 里可以使用 u 命令撤消多步操作, “重復”使用的快捷鍵是 Ctrl + R。
            使用兼容模式后, VIM 將放棄這些新的功能, 盡量模仿 vi 的各種操作方式。 只有在不兼容模式下, 才能更好地發揮 VIM 自身的特點。 Bram 爺爺強烈推薦大家使用 VIM 的不兼容模式, 滇狐也是這樣推薦的。 請務必在你的 .vimrc 中的第一行寫上: “set nocp”。
          • set ru
            該命令打開 VIM 的狀態欄標尺。 默認情況下, VIM 的狀態欄標尺在屏幕底部, 它能即時顯示當前光標所在位置在文件中的行號、列號, 以及對應的整個文件的百分比。 打開標尺可以給文件的編輯工作帶來一定方便。
          • set hls
            搜索時高亮顯示被找到的文本。 該指令的功能在 vimtutor 中已經有過介紹, 這里就不多說了。 其實似乎許多人并不喜歡這個功能。
          • set is
            搜索時在未完全輸入完畢要檢索的文本時就開始檢索。 vimtutor 對該命令也有過介紹, 滇狐并不喜歡這個功能, 因此滇狐自己的配置文件里是沒有這條命令的。 但是周圍有朋友很喜歡這個, 因此滇狐還是將它列在這里。
          • syntax on
            打開關鍵字上色。 進行程序設計的朋友應該都知道關鍵字上色是什么東西, 因此這里就不多說了。 不進行程序設計的朋友不妨也打開這個功能, 雖然不一定能夠用得著, 但這個功能其實也是很好玩的。
          • set backspace=indent,eol,start
            設想這樣一個情況: 當前光標前面有若干字母, 我們按下 i 鍵進入了 Insert 模式, 然后輸入了 3 個字母, 再按 5 下刪除(Backspace)。 默認情況下, VIM 僅能刪除我們新輸入的 3 個字母, 然后喇叭“嘟嘟”響兩聲。 如果我們“set backspace=start”, 則可以在刪除了新輸入的 3 個字母之后, 繼續向前刪除原有的兩個字符。
            再設想一個情況: 有若干行文字, 我們把光標移到中間某一行的行首, 按 i 鍵進入 Insert 模式, 然后按一下 Backspace。 默認情況下, 喇叭會“嘟”一聲, 然后沒有任何動靜。 如果我們“set backspace=eol”, 則可以刪除前一行行末的回車, 也就是說將兩行拼接起來。
            當我們設置了自動縮進后, 如果前一行縮進了一定距離, 按下回車后, 下一行也會保持相同的縮進。 默認情況下, 我們不能在 Insert 模式下直接按 Backspace 刪除行首的縮進。 如果我們“set backspace=indent”, 則可以開啟這一項功能。
            上述三項功能, 你可以根據自己的需要, 選擇其中一種或幾種, 用逗號分隔各個選項。 建議把這三個選項都選上。
          • set whichwrap=b,s,<,>,[,]
            默認情況下, 在 VIM 中當光標移到一行最左邊的時候, 我們繼續按左鍵, 光標不能回到上一行的最右邊。 同樣地, 光標到了一行最右邊的時候, 我們不能通過繼續按右跳到下一行的最左邊。 但是, 通過設置 whichwrap 我們可以對一部分按鍵開啟這項功能。 如果想對某一個或幾個按鍵開啟到頭后自動折向下一行的功能, 可以把需要開啟的鍵的代號寫到 whichwrap 的參數列表中, 各個鍵之間使用逗號分隔。 以下是 whichwrap 支持的按鍵名稱列表:
            • b
              在 Normal 或 Visual 模式下按刪除(Backspace)鍵。
            • s
              在 Normal 或 Visual 模式下按空格鍵。
            • h
              在 Normal 或 Visual 模式下按 h 鍵。
            • l
              在 Normal 或 Visual 模式下按 l 鍵。
            • <
              在 Normal 或 Visual 模式下按左方向鍵。
            • >
              在 Normal 或 Visual 模式下按右方向鍵。
            • ~
              在 Normal 模式下按 ~ 鍵(翻轉當前字母大小寫)。
            • [
              在 Insert 或 Replace 模式下按左方向鍵。
            • ]
              在 Insert 或 Replace 模式下按右方向鍵。
          • set encoding=cp936
            設置當前字符編碼為簡體中文。 這里還有一段能夠自動判斷文件的 encoding, 自動選擇合適的編碼的 .vimrc 代碼, 感興趣的話可以放到自己的配置文件中使用:
          " Encoding settings
          if has("multi_byte")
          " Set fileencoding priority
          if getfsize(expand("%")) > 0
          set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
          else
          set fileencodings=cp936,big5,euc-jp,euc-kr,latin1
          endif

          " CJK environment detection and corresponding setting
          if v:lang =~ "^zh_CN"
          " Use cp936 to support GBK, euc-cn == gb2312
          set encoding=cp936
          set termencoding=cp936
          set fileencoding=cp936
          elseif v:lang =~ "^zh_TW"
          " cp950, big5 or euc-tw
          " Are they equal to each other?
          set encoding=big5
          set termencoding=big5
          set fileencoding=big5
          elseif v:lang =~ "^ko"
          " Copied from someone's dotfile, untested
          set encoding=euc-kr
          set termencoding=euc-kr
          set fileencoding=euc-kr
          elseif v:lang =~ "^ja_JP"
          " Copied from someone's dotfile, unteste
          set encoding=euc-jp
          set termencoding=euc-jp
          set fileencoding=euc-jp
          endif
          " Detect UTF-8 locale, and replace CJK setting if needed
          if v:lang =~ "utf8___FCKpd___0quot; || v:lang =~ "UTF-8___FCKpd___0quot;
          set encoding=utf-8
          set termencoding=utf-8
          set fileencoding=utf-8
          endif
          else
          echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
          endif

          2 文本編輯設置

          • set sw=4
            自動縮進的時候, 縮進尺寸為 4 個空格。
          • set ts=4
            Tab 寬度為 4 個字符。
          • set et
            編輯時將所有 Tab 替換為空格。
            該選項只在編輯時將 Tab 替換為空格, 如果打開一個已經存在的文件, 并不會將已有的 Tab 替換為空格。 如果希望進行這樣的替換的話, 可以使用這條命令“:retab”。

          3 斷行設置

          • set lbr
            不在單詞中間斷行。 設置了這個選項后, 如果一行文字非常長, 無法在一行內顯示完的話, 它會在單詞與單詞間的空白處斷開, 盡量不會把一個單詞分成兩截放在兩個不同的行里。
          • set fo+=mB
            打開斷行模塊對亞洲語言支持。 m 表示允許在兩個漢字之間斷行, 即使漢字之間沒有出現空格。 B 表示將兩行合并為一行的時候, 漢字與漢字之間不要補空格。 該命令支持的更多的選項請參看用戶手冊。

          4 C/C++ 編碼設置

          • set sm
            顯示括號配對情況。 打開這個選項后, 當輸入后括號 (包括小括號、中括號、大括號) 的時候, 光標會跳回前括號片刻, 然后跳回來, 以此顯示括號的配對情況。
          • set cin
            打開 C/C++ 風格的自動縮進。 打開了自動縮進后, 在編碼的時候我們可以使用“V”命令選中一段文本后, 按“=”將這段文本重新調整縮進格式, 在一定程度上起到代碼美化的作用。
            另外, 打開了自動縮進后, 在使用 TERM 下的 vim 的時, 粘貼代碼時常常會出現版式混亂的現象。 那是因為 TERM 并不知道你現在正在粘貼代碼, 它直接“粘貼”動作向 vim 解釋為鍵入, 因此 vim 便按照設置的自動縮進格式為你的代碼調整了縮進。 不幸的是, 粘貼進去的代碼中本身已經包含了縮進, 因此便出現了版式混亂的情況。 在 gvim 中就不會出現這個問題, 因為它能夠知道你現在正在粘貼。
            知道了這個癥狀的來由, 解決方案也就顯而易見了: 在粘貼的時候把所有自動縮進都關閉, 粘貼完畢之后再打開。 一個個手工關閉自動縮進未免過于繁瑣, vim 為我們提供了一個很好用的命令, 只要輸入“:set paste”, 就可以關閉所有自動縮進。 粘貼完畢后再輸入“:set nopaste”就可以重新打開原有的自動縮進設置了。
          • set cino=:0g0t0(sus
            設定 C/C++ 風格自動縮進的選項, 這里簡要介紹一下這段代碼里用到的選項的含義, cino 支持的選項還很多, 更多選項請看用戶手冊。
          // :0
          //
          // switch 語句之下的 case 語句縮進 0 個空格,也就是說不縮進,與 switch 塊平
          // 齊,使用這樣風格:
          switch (x)
          {
          case 1:
          a = b;
          break;
          default:
          }

          // g0
          //
          // class、struct 等之下的訪問權限控制語句,如 public、protected、private 等,
          // 相對 class、struct 等所在的塊縮進 0 個空格,與 class 等塊平齊,使用這樣的
          // 風格:
          class foo
          {
          public:
          int a;
          private:
          int b;
          };

          // t0
          //
          // 如果函數返回值與函數名不在同一行,則返回值縮進 0 個空格,也就是說不縮進,如
          // 下所示:

          // set cino=t4
          int
          func1()
          {
          }

          // set cino=t0
          int
          func()
          {
          }

          // (sus
          //
          // 當一對括號跨越多行時,其后的行縮進前面 sw 指定的距離,效果如下:
          int a = (1 + 2 + 3
          + 4 + 5 + 6
          + 7 + 8) * 9;
          • set ai
            打開普通文件類型的自動縮進。 該自動縮進不如 cindent 智能, 但它可以為你編輯非 C/C++ 文件提供一定幫助。

          5 其它設置

          • set selectmode=
            不使用 selectmode。
          • set mousemodel=popup
            當右鍵單擊窗口的時候, 彈出快捷菜單。
          • set keymodel=
            不使用“Shift + 方向鍵”選擇文本, “Shift + 方向鍵”代表向指定方向跳一個單詞。 如果你喜歡這項功能的話, 可以使用“set keymodel=startsel,stopsel”打開它。
          • set selection=inclusive
            指定在選擇文本時, 光標所在位置也屬于被選中的范圍。 如果指定 selection=exclusive 的話, 可能會出現某些文本無法被選中的情況。
          • colo torte
            選擇 torte 配色方案。 VIM 里內置了許多關鍵字上色的配色方案, 另外你還可以到網上下載更多配色方案, 或是自己編寫。 點擊“編輯”→“調色板”, 就能列出所有支持的配色方案。 你可以把“調色板”子菜單剪下來, 然后慢慢選擇, 挑出一個你最喜歡的配色方案來。

          6 圖形界面設置

          • set nowrap
            指定不折行。 如果一行太長, 超過屏幕寬度, 則向右邊延伸到屏幕外面。 如果使用圖形界面的話, 指定不折行視覺效果會好得多。
          • set guioptions+=b
            添加水平滾動條。 如果你指定了不折行, 那為窗口添加一個水平滾動條就非常有必要了。
          • set guifont=Courier\ 9
            設置圖形界面下的字體。 你可以點“編輯”→“選擇字體”, 然后在對話框中選出你喜歡的字體與字號, 選擇完畢后, 先按幾下 ESC 確認處在 Normal 模式下, 然后輸入這條命令:“:set guifont?” 回車后 gvim 屏幕最下方會顯示出你當前所用的字體的名稱與字號。 將獲得的結果寫到配置文件里面就可以了, 需要注意一點, 如果字體名稱里面含有空格的話, 在抄的時候需要在所有空格前面加一個斜杠。

          7 條件選擇

          同一個配色方案, 在 gvim 下和字符界面的 vim 下效果大相徑庭, 滇狐個人的習慣是, 在 gvim 下使用 torte 配色方案, 在 vim 下使用 ron 配色方案。 因此我們有必要針對 gvim 和 vim 進行不同的設置。

          另外, 前面我們在 gvim 下不使用折行, 開啟水平滾動條, 但在 vim 下, 是沒有滾動條可用的, 因此還是有必要為 vim 保留自動折行。

          條件選擇設置的格式如下:

          if (has("gui_running"))
          " 圖形界面下的設置
          set nowrap
          set guioptions+=b
          colo torte
          else
          " 字符界面下的設置
          set wrap
          colo ron
          endif
          posted on 2008-06-20 23:01 CONAN 閱讀(868) 評論(0)  編輯  收藏 所屬分類: VIM
          主站蜘蛛池模板: 波密县| 南木林县| 綦江县| 新闻| 安塞县| 龙江县| 旬邑县| 勃利县| 延川县| 平利县| 沂水县| 秭归县| 德庆县| 江永县| 昆明市| 上思县| 化州市| 永城市| 江都市| 宁安市| 库伦旗| 甘肃省| 修水县| 峨边| 湘阴县| 富阳市| 谢通门县| 鲁山县| 沧源| 滁州市| 丰宁| 长岭县| 保康县| 聂拉木县| 南皮县| 吉林省| 淳安县| 临安市| 安阳县| 金溪县| 天台县|