使用的目的
使用 snippets 類按鍵的目的主要由以下兩點(diǎn):
- 減少按鍵次數(shù)
- 減輕記憶負(fù)擔(dān)
使用的效果如下:
在開發(fā) Django 的過程中,有一些需要重復(fù)輸入的結(jié)構(gòu)谒出,例如定義數(shù)據(jù)模型是需要設(shè)置字段類型参萄。需要定義 Char 類型的字段需要反復(fù)輸入
= models.CharField(max_length=30)
這樣的結(jié)構(gòu)妆偏。于是就定義了 charf
作為縮寫需忿。每次需要定義的時(shí)候谍夭,就輸入 charf
然后擴(kuò)展為所需的結(jié)構(gòu)紊撕。如此就可以節(jié)省大量的輸入以及對(duì)默認(rèn)設(shè)置的記憶負(fù)擔(dān)罢荡。
大家在在編程的過程中不可避免的需要敲大量的重復(fù)的代碼結(jié)構(gòu)。而作為程序員对扶,很重要的一個(gè)意識(shí)区赵,就是要堅(jiān)持實(shí)踐 DRY 原則。使用 snippets 類的插件浪南,可以通過自定義代碼片段的方式來提高效率笼才。
安裝步驟
安裝使用Vundle
Plugin 'honza/vim-snippets'
Plugin 'github.com/SirVer/ultisnips'
vim中 :BundleInstall 命令即可完成安裝。
相關(guān)的資料可以查看官網(wǎng)https://github.com/honza/vim-snippets
如何擴(kuò)展默認(rèn)的 Snippets
vim-snippets 默認(rèn)支持很多中語言的代碼片段络凿。默認(rèn)的代碼片段文件放在~/.vim/bundle/vim-snippets/UltiSnips
目錄下骡送。如果沒有使用Vundle的話昂羡,目錄會(huì)在 ~/.vim/plugin/vim-snippets/UltiSnips
下。根據(jù)支持的文件類型不同摔踱,文件的名稱不同虐先。例如 Python
的配置文件對(duì)應(yīng)的是 Python.snippets
。vim 打開后綴為 py 的文件就是加載 python.snippets
文件中的代碼片段派敷。在這個(gè)我文件中也可以增加我們的代碼片段蛹批。但是這樣做的話,不方便我們自定義代碼片段的保存和同步篮愉。換機(jī)器或是卸載插件的時(shí)候腐芍,自定義的的插件就會(huì)丟失。
更好的方法是單獨(dú)新建一個(gè)目錄潜支,專門保存自定義的代碼片段甸赃。具體的操作方法是:
- 創(chuàng)建一個(gè)文件夾 .vim/mysnippets/
- 在
.vimrc
文件中指定代碼片段搜索文件夾。let g:UltiSnipsSnippetDirectories=["UltiSnips","mysnippets"]
- 在
mysnippets
文件夾中創(chuàng)建自己的代碼片段文件冗酿。
完成了以上三步埠对,只需要將 mysnippets
文件夾備份好,就可以很好的備份和管理自定義的代碼片段了裁替。
特別注意
UltiSinps 與 YouCompleteMe Tab 鍵沖突問題
如果使用了 YouCompleteMe
插件的話项玛,就會(huì)因?yàn)?Tab
鍵被 YMC 插件占用而導(dǎo)致代碼片段展開的快捷鍵失效。因?yàn)槿跖校琔ltiSinps 也定義了使用 Tab 來完成代碼展開的功能襟沮。嘗試了找到的各種方法,大部分方法建議取消 YMC 對(duì) Tab 鍵的占用昌腰。但是开伏,我還是想讓 YCM 繼續(xù)是用 Tab 鍵。(畢竟自動(dòng)補(bǔ)全的使用場(chǎng)景遭商,比代碼片段的要多固灵。)所以,一直沒有配置成功劫流。最終找到了一個(gè)可以解決這個(gè)問題的方式巫玻。引入一個(gè)新的插件 supertab 就能夠讓 YCM 和 UltiSinps 和平相處,共同發(fā)揮作用了祠汇。
具體的使用方法:
將插件添加到 .vimrc 文件中仍秤。Bundle 'ervandew/supertab'
然后使用 :BundleInstall
命令進(jìn)行安裝。
安裝完成之后可很,增加以下配置內(nèi)容到 .vimrc文件中
" make YCM compatible with UltiSnips (using supertab)
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:SuperTabDefaultCompletionType = '<C-n>'
" better key bindings for UltiSnipsExpandTrigger
let g:UltiSnipsExpandTrigger="<c-e>"
let g:UltiSnipsJumpForwardTrigger="<c-j>"
let g:UltiSnipsJumpBackwardTrigger="<c-k>"
這里要特別注意诗力,在 supertab 插件官方給出的配置中 UltiSnipsExpandTrigger 推薦的配置是 "<cr>" 即回車鍵。但是如果采用了這個(gè)配置我抠,就是導(dǎo)致編輯模式下苇本,回車不能夠換行了导坟。所以,這里把配置替換成了<c-e>圈澈。