做中學之Vim實踐教程


做中學之學用學用Vim

Vim

Vim是一個非常好的文本編輯器,很多專業程序員使用Vim編輯代碼,即使以后你不編寫程序,只要跟文本打交道,都應該學學Vim,可以瀏覽參考一下普通人的編輯利器——Vim這篇文章,看看Vim可以如何用。

Vim學習曲線非常陡峭,各種編輯器學習曲線如下圖(有調侃的意思):

學習曲線

Vim跟五筆打字很類似,不會的時候好象很高大上,感覺學起來很難,其實不然。我建議大家通過“做中學”來學習Vim,你會發現Vim學起來相當簡單,掌握三五個命令就可以用起來了。具體來說通過VimTUTOR甚至玩游戲(Vim大冒險PacVim)來學習。

玩游戲去Vim大冒險PacVim通關就學會了Vim。

VimTUTOR是個實踐教程,通過實踐30分鍾讓你對Vim編輯器入門,只要在命令行中輸入Vimtutor,然后跟着教程練習就可以了。如下圖:

vimtutor

vimtutor界面

然后你可以把這張圖做計算機的桌面背景,參考《簡明 Vim 練級攻略》每天學習一兩個鍵,一兩周就可以很好的用Vim了:
vim

IT相關的同學可以看看程序員專用的Vim鍵盤圖:

vim-programmer

程序員有幾個鍵提示一下:

  • 大寫“K”可以用來查找函數的幫助信息:查看 man page,命令模式下,將光標放在函數名上,按"K"可以直接察看 man page。

  • 幾個設置

    • :set nu 顯示行號
    • :set ai 自動縮行
    • :set ts=4 設置一個 TAB 鍵等於幾個空格
  • 移動光標

    • [[ 轉到上一個位於第一列的"{"
    • ]] 轉到下一個位於第一列的"{"
    • { 轉到上一個空行
    • } 轉到下一個空行
  • gd 轉到當前光標所指的局部變量的定義

  • 一個項目中總會有多個文件,多文件操作是編程必備技能

    • 多buffer: vi a.c b.c c.c
      • :e filename 進入Vim后,打開其他文件
      • :n, :N 前后切換
      • :bn, :bp 前后循環切換
      • :files:buffers:ls 可以列出目前緩沖區中的所有文件
        • + 表示緩沖區已經被修改過了的文件
        • # 代表上一次編輯的文件
        • % 是目前正在編輯中的文件
        • :b 文檔名或編號 切換至該文件
    • 多view: vi -o a.c b.c c.c
      • :spilit(:sp), :vspilit(:vsp) 切分view
      • Ctrl+w, w 循環view切換
      • Ctrl+w,方向鍵 切換到前/下/上/后一個view
      • Ctrl+w,h/j/k/l 切換到前/下/上/后一個view
      • Ctrl+w,= 讓上下左右view等寬等高
      • Ctrl+w,_ 當前view高度擴展到最大
      • Ctrl+w,| 當前view寬度擴展到最大
      • Ctrl+w,c:關閉當前view
    • 多 tab(較少用)
      • :tabnew [++opt選項] [+cmd] file 新tab中打開文件
      • :tabc 關閉當前的tab
      • :tabo 關閉其他的tab
      • :tabs 查看所有打開的tab
      • :tabn 切換到后一個tab
      • :tabp 切換到前一個tab
      • ngt 切換到后n個tab
      • ngT 切換到前n個tab

Vim配置

剛安裝好的Vim是難看又難用,通過配置和安裝插件,Vim可以變成神器。

~/.Vimrc是Vim的配置文件,通過.Vimrc文件你可以控制Vim的外觀、字體、操作方式、快捷鍵、插件屬性等。

上面提到幾個設置:

  • :set nu 顯示行號
  • :set ai 自動縮行
  • :set ts=4 設置一個 TAB 鍵等於幾個空格

每次打開Vim都這么設置也是很煩人的,我們可以把這幾行寫入~/.Vimrc,這樣打開Vi時就不用我們一個一個的設置了。 ~/.Vimrc中可以設置

Vim 插件管理

作為一個老牌編輯器,Vim有近萬個插件。所需即所獲:像 IDE 一樣使用 Vim通過定制,你完全可以把Vim打造成IDE:

打造C/++ IDE, c.Vim是一個重要的插件,我們以c.Vim說明一下Vim插件的下載、安裝、使用、管理的問題。

~/.Vim目錄是存放所有插件的地方。如果是第一次安裝插件要通過 mkdir ~/.Vim 創建~/.Vim 目錄。通過cd ~/.Vim 進入~/.Vim目錄。

mkdir src
cd src
git clone https://github.com/WolfgangMehner/c-support.git
cp -r ./c-support/ ..

在配置文件中啟用插件:

Vim ~/.Vimrc
filetype plugin on

使用前我們使用vi ~/.Vim/c-support/templates/Templates編輯一下模板,主要是Author, Authorref,Email,Organizaiont,Company等:

我們這時用vi hello.c來編輯C代碼時,會自動插入文件說明:

我們使用輸入\im就可以生成main函數:

幫助文檔參看~/.Vim/c-support/doc/c-hotkeys.pdf,通過下面的截圖你能感受到c.Vim功能的強大:

上面的命令不用死記硬背,通過做中學在實踐中慢慢的掌握。

我們也可以通過在線文檔查找幫助。

如果想安裝其它插件,Vim的官方插件在Vim Scripts,github上有個鏡像Vim Plugins On GitHub

如上所示,Vim通過在 .Vim 目錄中預定義子目錄管理所有插件,如子目錄 doc存放插件幫助文檔、plugin 存放通用插件腳本,用戶將插件打包文檔中的對應子目錄拷貝至 .Vim/ 目錄即可完成插件的安裝。但是這樣一鍋粥的管理方式會導致一些問題:比如命名沖突,更新、卸載等管理復雜。現代的編輯器如AtomSublime Text的插件管理就非常好。

這個問題也有Vim插件來解決,Vim的插件管理有Pathogen,VundleVim-plug
這些插件。Vundle應用比較廣,想學的話下面的參考資料中有教程,我們在這里使用小巧快速的Vim-plug

首先我們下載 plug.Vim 並把它放在 ~/.Vim/autoload 目錄。然后配置~/.Vimrc,加入一個Vim plug節:

  • 這個節以call plug#begin() 開始
  • 用Vim-plug的命令列出要安裝的插件
  • plug#end() 結束這個節

比如,我們安裝c.Vim:

" 指定插件目錄 (for NeoVim: ~/.local/share/nVim/plugged)
call plug#begin('~/.Vim/plugged')

" 注意:插件路徑放到單引號中,下面是幾個Vim-plug的命令例子

" github上的插件安裝可以使用簡化引用: 比如安裝fetches https://github.com/junegunn/Vim-easy-align 
" Plug 'junegunn/Vim-easy-align'

" 也可以使用git URL 安裝
"Plug 'https://github.com/junegunn/Vim-github-dashboard.git'

" 用|分隔可以在一行安裝多個插件 
" Plug 'SirVer/ultisnips' | Plug 'honza/Vim-snippets'

" 安裝c.Vim

Plug 'https://github.com/Vim-scripts/c.Vim.git'

" Initialize plugin system
call plug#end()

保存~/.Vimrc,重新打開Vim,使用:PlugInstall就可以安裝~/.Vimrc中列出的插件了:

其他插件管理的命令如下:

這樣,根據自己的需求就可以定制具有個人特色的Vim了。

Vim 常用插件

c.Vim

c.Vim 是C/C++程序員使用Vim必裝的插件,我們上面已經介紹了安裝和使用的方法,常用的操作有

  • \im 插入主函數
  • \if 插入函數
  • \cfu 插入函數頭,即函數說明
  • \cfr 插入一個frame comment,可以用來寫變量說明
  • \p< 插入一個include , 並且把光標放在<>中
  • \rc 保存並編譯
  • \rr 運行
  • \nr 可以在~/.Vim/c-support/codesnippets中編寫一些預編譯代碼或者代碼塊,通過此命令使用

Emmet.Vim(HTML,CSS)

Emmet (Zen Coding的新版本) 是一個能大幅度提高前端開發效率的一個工具。
Emmet適用於編寫HTML/XML 和 CSS 代碼的前端開發人員。Emmet為大部分流行的編輯器都提供了安裝插件,Emmet-Vim是Vim的Emmet插件。

Emmet-Vim的基本用法:先寫簡寫形式,然后用"Ctrl+y+,"將其轉成HTML代碼
例入,先輸入!html:5,然后按"Ctrl+y+,",就會擴展出來:

<!DOCTYPE html>
 <html lang="en">
 <head>
   <meta charset="UTF-8">
    <title></title>
 </head>
 <body>

 </body>
 </html>

基本規則:

  • E 代表HTML標簽
  • E#id 代表標簽E有id屬性
  • E.class 代表E有class屬性
  • E[attr=foo] 代表某個特定屬性
  • E{info} 代表標簽E包含的內容是info
  • E>N 代表N是E的子元素
  • E+N 代表N是E的同級元素
  • E^N 代表N是E的上級元素

tabular

for Vim-markdown

Vim-markdown

need tabular

WebAPI.Vim

YouCompleteMe(自動補全)

Vim使用舉一反三

Vim有多牛?幾乎所有的現代編輯器,IDE甚至瀏覽器都有Vim模式插件,下面是我使用過的一個不完全列表。當然這些插件功能和Vim會差很多,但至少都會支持常見的編輯和移動。

  • Bash: 在.bashrc 中set -o vi,Bash中就可以像vi一樣進行編輯和移動了

  • Vim for Firefox : 像Vim一樣使用firefox。Vimperator 是一個Firefox瀏覽器擴展,能夠使Firefox瀏覽器像Vim一樣高效工作。在安裝上 Vimperator之后,無論是 Firefox 的外觀,還是 Firefox的行為,都像極Vim。Vimperator還具有類似鍵盤綁定的功能,這使你能夠靈活地使用熱鍵來完成各種操作。

  • Vim for Chrome:像Vim一樣使用Chrome, Vimium 這個名字其實是 Vim 和 Chromium 的合體。

  • Vim for Atom:安裝Vim Mode Plus Package

  • Vim for Notepad++:

  • Vim for Sublime:選擇Preferences->Settings- Default, 在文本的最下面有一行 "ignored_packages": ["vintage"], ["vintage"]->[].

  • Vim for Intellj IDEA:File>Settings>Plugins>Install JetBrains plugin...,然后搜索安裝IdeaVim插件。

  • Vim for Eclipse:Vrapper is an eclipse plugin which acts as a wrapper for existing eclipse text editors to provide a Vim-like input scheme for moving around and editing text.

  • Vim for Visual Studio:This is a Vim Emulation layer for Visual Studio 2010 and above. It integrates the familiar key binding experience of Vim directly into Visual Studio's editor.

  • ...

參考資料


歡迎關注“rocedu”微信公眾號(手機上長按二維碼)

做中教,做中學,實踐中共同進步!

rocedu



如果你覺得本文對你有幫助,請點一下左下角的“好文要頂”和“收藏該文



免責聲明!

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



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