一文讓你對vim產生興趣

引言:現在有很多成熟的IDE,pycharm、vs code、atom、codeblocks,不同軟件在不同方向各有優勢,但是當使用服務器時這些桌面版IDE就很難發揮優勢,推薦vim的理由是:當時用無桌面版Linux時免不了與vim打交道,如果在windows下開發好用版本控制軟件提交到服務器下這樣太麻煩,用sftp上傳到服務器也需要多餘的操作,使用vim能夠讓操作更加簡潔方便,同時配置一些插件能夠讓vim自動補全、換行縮進等等,而且我覺得自動補全Python第三方庫的速度能夠達到pycharm級別,遠比vs code要快,希望這篇文章能夠讓大家對vim產生興趣,後期會不斷分享計算機視覺、強化學習、優化算法、工具使用等方面的內容,感興趣的可以關注一下微信公眾號,會定期分享一些技術和工具,“平凡而詩意”。


常用命令

我覺得vim命令是一個讓人又愛又恨的東西,突然從Windows下的鼠標操作切換到vim的Linux操作會感覺很不方便,有的時候甚至會誤操作導致很大的坑。但是用習慣後再回到window下回發現會不自覺的使用這些命令,可見,這些命令的確帶來了便攜性,vim命令有很多,一下子也記不完,這裡我就總結一些我個人常用的命令。

1. 註釋

手動輸入註釋符:

單行註釋:可以直接在行前添加註釋符比如 #

多行註釋:ctrl+v 進入視圖模式, 然後shift+i,輸入註釋符,最後按Esc

也可以使用替換命令,詳細的請看第3條:

# 註釋,以Python為例# 註釋m到n行:m,ns/^/#/g # 解除註釋:m,ns/^#//g# 註釋整個文檔:1,$s/^/#/g# 還有更高效快速的方法:%s/^/#/g

2. 多窗口

寫代碼過程中要打開多個窗口,如果反覆關閉開啟會很麻煩,vim可以使用多窗口

直接打開多個文件:

vim -On file1 file2 ...

已經打開一個文件之後再大開一個文件:

# 可以打開本地文件:e file# 也可以打開遠程文件:e ftp://host/*

多窗口切換文件:

下一個文件:bn上一個文件:bp

在另一窗口分割打開文件:

:split file

多窗口之間的切換:

# 依次切換ctrl+w+w # 雙擊w# 指定方向切換先ctrl+w,鬆開,然後按上下左右鍵選擇

3. 查找與替換

# 查找字符串/str# 替換# 替換當前行,其中g是替換標誌,代表global的意思,也可以換成c:需要確認;i:大小寫不敏感;I:大小寫敏感:s/old/new/g# 全局替換:%s/old/new/g# 替換特定行:m,ns/old/new/g# 選擇區域替換:'s/old/new/g #先visual模式下選擇要替換的區域

4. 與shell交互

臨時退出:ctrl+z回到vim:fg執行shell命令:!# 命令模式下:! ls ./

5. 插入

# 在當前行首插入I # 也就是shift+i# 在當前位置行尾插入A# 在當前字符所在位置插入i# 在當前字符之後插入a# 在當前行的前一行插入O # shift+ o# 在當前行的後一行插入o

6. 撤銷和重做

# 撤銷操作u# 撤銷對整行的操作U# 重做(把撤銷的動作撤銷)ctrl+r

7. 移動

# 移動到文本頭部gg# 移動到尾部G #Windows下同shift+g# 向前移動一個單詞w # 2w移動兩個單詞# 向後移動一個單詞b# 移動到行首0# 移動到行尾$# 移動到段落頭部(# 移動到段落尾部)

8. 對比差異

這一點和beyond compare類似:

vim -diff file1 file2

屬性設置

可以對vim屬性設置,使得每次打開vim時都能起作用,基本的屬性設置比如高亮、縮進等,先貼上我的設置:

1. 進入home路徑下

cd ~

2. 創建.vimrc文件

touch .vimrcvim .vimrc

3. 粘貼以下內容

set nocompatibleset numberset icset hlsearchset encoding=utf-8set fileencodings=utf-8,ucs-bom,GB2312,big5set autoindentset smartindentset scrolloff=2set showmatchset shiftwidth=4set tabstop=4set showmatchset cursorlineset autoreadsyntax on

這樣保存退出後就生效了,網上有很多這一類的教程,創建.vimrc的作用是保證每次啟動vim都可以起作用。


插件

工欲善其事必先利其器,無論是做Python還是c++開發,如果有一個好的IDE,那麼效率將會得到大大的提升,如果想把vim用於輕量級IDE,那麼插件是必不可少的,以下以vim配置Python3為例。

1. 檢查vim版本是否符合

vim --version

在輸出的信息檢查以下是否有'+python3'字眼,如果沒有說明vim版本太低不支持,需要卸載重新安裝vim。

2. 安裝Vundle插件管理器

個人認為Vundle 就如同maven之於Java、npm之於js、pip之於Python,安裝了Vundle後方便後續安裝插件。

首先克隆到指定目錄:

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim# 如果克隆失敗可以參考我的另外一篇文章,或者查看我的知乎專欄“”Lee先森的技術站”

Thinker:git一些報錯解決方法[每一項都親測,保證不踩坑]

其次,在~/.vimrc中輸入如下內容:

set nocompatible " requiredfiletype off " required" set the runtime path to include Vundle and initializeset rtp+=~/.vim/bundle/Vundle.vimcall vundle#begin()" alternatively, pass a path where Vundle should install plugins"call vundle#begin('~/some/path/here')" let Vundle manage Vundle, requiredPlugin 'gmarik/Vundle.vim'" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)" All of your Plugins must be added before the following linecall vundle#end() " requiredfiletype plugin indent on " required上述 Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)下面的一段空白處是用於添加其他插件。

3. 安裝插件

首推YouCompleteMe,這個插件用於自動補全,速度補全速度可以達到pycharm的級別,但是這個插件安裝十分麻煩,可以參考我的另外一篇文章:

另一篇文章可以查看我的知乎專欄“Lee先森的技術站”

Thinker:vim插件YouCompleteMe安裝

然後在~/.vimrc中添加

Plugin 'Valloric/YouCompleteMe'

保存退出重新打開,在命令模式下輸入:PluginInstall即可安裝,左下角顯示Done!即為完成,可以在緊接著下面添加如下設置:

let g:ycm_global_ycm_extra_conf = "~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py"let g:ycm_key_invoke_completion = ''let g:ycm_min_num_identifier_candidate_chars = 2let g:ycm_goto_buffer_command = 'horizontal-split'let g:ycm_seed_identifiers_with_syntax=1map :YcmCompleter GoTo # 按F2跳轉到定義處let g:ycm_error_symbol = '>>'let g:ycm_warning_symbol = '>*'

其次是Autoformat這是一個自動格式化代碼的工具,事先需要安裝pep8:

pip install autopep8

其次在vimrc空白處添加:

Plugin 'Chiel92/vim-autoformat'nnoremap :Autoformat # 按F6自動格式化let g:autoformat_autoindent = 0let g:autoformat_retab = 0let g:autoformat_remove_trailing_spaces = 0

保存並退出,重新進入vim,命令模式下輸入:PluginInstall

還有nerdtree這是一個目錄樹插件,可以給代碼添加目錄:

Plugin 'https://github.com/scrooloose/nerdtree'nnoremap :NERDTreeToggle # 按F3顯示或隱藏目錄autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

還有indentLine,這是一個縮進線插件,對於Python這種縮進要求很嚴格的語言來說很重要:

Plugin 'Yggdroot/indentLine'let g:indentLine_char='┆'let g:indentLine_enabled = 1注意:把上述內容添加到vimrc後需要關閉後重新打開,在命令模式下輸入:PluginInstall,也可以用:Plugin '插件',例如:Plugin 'Yggdroot/indentLine'

總結:首先是自己做個筆記,如果能夠幫到大家,當然十分榮幸;其次,好與不好,仁者見仁智者見智,每個人都會根據自己的需求和判斷進行選擇,vim插件管理器有很多,vundle、vim-plug、pathogen、vim addon manager等等,每一個都用過,也都對比過,vundle在高階插件方面的確存在不足,但是基本使用大同小異,我覺得滿足我使用足夠了,而且我覺得使用比較簡潔方便,各位看到的可以根據自己的需求選擇插件管理器。


分享到:


相關文章: