天天看點

TaoBeier 的 Vim 配置,支援 Python、Javascript、Golang 等

這是 taobeier 精心打造的 vim 環境配置,支援 python、javascript、vue.js、golang 和 markdown。

<a target="_blank"></a>

你需要一個有 python 支援的 vim 版本。請使用 <code>vim --version | grep +python</code> 來檢查确認。

debian/ubuntu 平台

<code>sudo apt-get install python vim exuberant-ctags git</code>

<code>sudo pip install dbgp pep8 flake8 pyflakes isort</code>

redhat/centos 平台

centos 6.7 的 yum 源自帶的 python 版本較舊,推薦自行安裝 python2.7。

<code>sudo yum install python vim ctags git</code>

mac os 平台

<code>brew install python vim git</code>

<code>wget http://tenet.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz &amp;&amp; tar -zxvf ctags-5.8.tar.gz &amp;&amp; cd ctags-5.8 &amp;&amp; ./configure &amp;&amp; make &amp;&amp; sudo make install</code>

<code>wget https://raw.githubusercontent.com/tao12345666333/vim/master/vimrc -o $home/.vimrc</code>

打開 vim,它将會自動安裝插件。請耐心等待它完成。或者你可以使用下面的指令來自行安裝。

<code>vim -e -u $home/.vimrc +qall</code>

享受你的 vim 并個性化它吧!

配置(截取了部分)

<code>" let vundle manage vundle</code>

<code>plugin 'gmarik/vundle'</code>

<code></code>

<code>" ============================================================================</code>

<code>" active plugins</code>

<code>" you can disable or add new ones here:</code>

<code>" plugins from github repos:</code>

<code>" better file browser</code>

<code>plugin 'scrooloose/nerdtree'</code>

<code>" code commenter</code>

<code>plugin 'scrooloose/nerdcommenter'</code>

<code>" class/module browser</code>

<code>plugin 'majutsushi/tagbar'</code>

<code>" code and files fuzzy finder</code>

<code>plugin 'kien/ctrlp.vim'</code>

<code>" extension to ctrlp, for fuzzy command finder</code>

<code>plugin 'fisadev/vim-ctrlp-cmdpalette'</code>

<code>" zen coding</code>

<code>plugin 'mattn/emmet-vim'</code>

<code>" git integration</code>

<code>plugin 'motemen/git-vim'</code>

<code>" tab list panel</code>

<code>plugin 'kien/tabman.vim'</code>

支援操作

指令

解釋

<code>:pluginlist</code>

列出所有插件

<code>:plugininstall(!)</code>

安裝/更新插件

<code>:pluginsearch(!) foo</code>

搜尋 foo 相關的插件

<code>:pluginclean(!)</code>

清理未使用的插件

<code>:pluginupdate</code>

更新插件

配置

<code>" auto open or close nerdtree</code>

<code>autocmd vimenter * if !argc() | nerdtree | endif</code>

<code>autocmd bufenter * if (winnr("$") == 1 &amp;&amp; exists("b:nerdtreetype") &amp;&amp; b:nerdtreetype == "primary") | q | endif</code>

<code>" nerdtree -----------------------------</code>

<code>" toggle nerdtree display</code>

<code>map &lt;f3&gt; :nerdtreetoggle&lt;cr&gt;</code>

<code>" open nerdtree with the current file selected</code>

<code>nmap ,t :nerdtreefind&lt;cr&gt;</code>

<code>" don;t show these file types</code>

<code>let nerdtreeignore = ['\.pyc$', '\.pyo$']</code>

快捷鍵

<code>f3</code>

打開/關閉 nerdtree

<code>,t</code>

打開 nerdtree 并選中目前檔案

<code>" syntastic ------------------------------</code>

<code>" show list of errors and warnings on the current file</code>

<code>nmap &lt;leader&gt;e :errors&lt;cr&gt;</code>

<code>" turn to next or previous errors, after open errors list</code>

<code>nmap &lt;leader&gt;n :lnext&lt;cr&gt;</code>

<code>nmap &lt;leader&gt;p :lprevious&lt;cr&gt;</code>

<code>" check also when just opened the file</code>

<code>let g:syntastic_check_on_open = 1</code>

<code>" syntastic checker for javascript.</code>

<code>" eslint is the only tool support jsx.</code>

<code>" if you don't need write jsx, you can use jshint.</code>

<code>" and eslint is slow, but not a hindrance</code>

<code>" let g:syntastic_javascript_checkers = ['jshint']</code>

<code>let g:syntastic_javascript_checkers = ['eslint']</code>

<code>" don't put icons on the sign column (it hides the vcs status icons of signify)</code>

<code>let g:syntastic_enable_signs = 0</code>

<code>" custom icons (enable them if you use a patched font, and enable the previous</code>

<code>" setting)</code>

<code>let g:syntastic_error_symbol = ''</code>

<code>let g:syntastic_warning_symbol = ''</code>

<code>let g:syntastic_style_error_symbol = ''</code>

<code>let g:syntastic_style_warning_symbol = ''</code>

特性

儲存時自動進行文法靜态檢查,友善的錯誤提示及靈活的可擴充性。

<code>\e</code>

打開錯誤清單

<code>\n</code>

移動到下一個錯誤位置

<code>\p</code>

移動到上一個錯誤位置

<code>" signify ------------------------------</code>

<code>" this first setting decides in which order try to guess your current vcs</code>

<code>" update it to reflect your preferences, it will speed up opening files</code>

<code>let g:signify_vcs_list = [ 'git', 'hg' ]</code>

<code>" mappings to jump to changed blocks</code>

<code>nmap &lt;leader&gt;sn &lt;plug&gt;(signify-next-hunk)</code>

<code>nmap &lt;leader&gt;sp &lt;plug&gt;(signify-prev-hunk)</code>

<code>" nicer colors</code>

<code>highlight diffadd cterm=bold ctermbg=none ctermfg=119</code>

<code>highlight diffdelete cterm=bold ctermbg=none ctermfg=167</code>

<code>highlight diffchange cterm=bold ctermbg=none ctermfg=227</code>

<code>highlight signifysignadd cterm=bold ctermbg=237 ctermfg=119</code>

<code>highlight signifysigndelete cterm=bold ctermbg=237 ctermfg=167</code>

<code>highlight signifysignchange cterm=bold ctermbg=237 ctermfg=227</code>

<code>:git [args]</code>

類似執行<code>git</code>指令一樣

<code>:gstatus</code>

類似<code>git status</code>。在清單中使用<code>-</code>添加/移除檔案

<code>:gcommit [args]</code>

類似 <code>git commit</code>

<code>:gmerge [args]</code>

類似 <code>git merge</code>

<code>:gpull [args]</code>

類似 <code>git pull</code>

<code>:gpush [args]</code>

類似 <code>git push</code>

<code>:gvdiff [revision]</code>

類似 <code>git push</code> 但是會切分視窗

更多詳細的操作可以使用 <code>:help fugitive</code>。

<code>" tagbar -----------------------------</code>

<code>" toggle tagbar display</code>

<code>map &lt;f4&gt; :tagbartoggle&lt;cr&gt;</code>

<code>" autofocus on tagbar open</code>

<code>let g:tagbar_autofocus = 1</code>

<code>f4</code>

打開 tag 清單

<code>" neocomplcache ------------------------------</code>

<code>" most of them not documented because i'm not sure how they work</code>

<code>" (docs aren't good, had to do a lot of trial and error to make</code>

<code>" it play nice)</code>

<code>" disable autocomplpop.</code>

<code>let g:acp_enableatstartup = 0</code>

<code>" use neocomplcache.</code>

<code>let g:neocomplcache_enable_at_startup = 1</code>

<code>let g:neocomplcache_enable_ignore_case = 1</code>

<code>" use smartcase.</code>

<code>let g:neocomplcache_enable_smart_case = 1</code>

<code>let g:neocomplcache_enable_auto_select = 1</code>

<code>let g:neocomplcache_enable_fuzzy_completion = 1</code>

<code>let g:neocomplcache_enable_camel_case_completion = 1</code>

<code>let g:neocomplcache_enable_underbar_completion = 1</code>

<code>let g:neocomplcache_fuzzy_completion_start_length = 1</code>

<code>let g:neocomplcache_auto_completion_start_length = 1</code>

<code>let g:neocomplcache_manual_completion_start_length = 1</code>

<code>" set minimum syntax keyword length.</code>

<code>let g:neocomplcache_min_keyword_length = 1</code>

<code>let g:neocomplcache_min_syntax_length = 1</code>

<code>let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'</code>

<code>" complete with workds from any opened file</code>

<code>let g:neocomplcache_same_filetype_lists = {}</code>

<code>let g:neocomplcache_same_filetype_lists._ = '_'</code>

<code>" &lt;tab&gt;: completion.</code>

<code>inoremap &lt;expr&gt;&lt;tab&gt; pumvisible() ? "\&lt;c-n&gt;" : "\&lt;tab&gt;"</code>

<code>" define keyword.</code>

<code>if !exists('g:neocomplcache_keyword_patterns')</code>

<code>let g:neocomplcache_keyword_patterns = {}</code>

<code>endif</code>

<code>let g:neocomplcache_keyword_patterns['default'] = '\h\w*'</code>

<code>" plugin key-mappings.</code>

<code>inoremap &lt;expr&gt;&lt;c-g&gt; neocomplcache#undo_completion()</code>

<code>inoremap &lt;expr&gt;&lt;c-l&gt; neocomplcache#complete_common_string()</code>

<code>" &lt;c-h&gt;, &lt;bs&gt;: close popup and delete backword char.</code>

<code>inoremap &lt;expr&gt;&lt;c-h&gt; neocomplcache#smart_close_popup()."\&lt;c-h&gt;"</code>

<code>inoremap &lt;expr&gt;&lt;bs&gt; neocomplcache#smart_close_popup()."\&lt;c-h&gt;"</code>

<code>inoremap &lt;expr&gt;&lt;c-y&gt; neocomplcache#close_popup()</code>

<code>inoremap &lt;expr&gt;&lt;c-e&gt; neocomplcache#cancel_popup()</code>

<code>&lt;tab&gt;</code>

使用 tab 鍵進行待提示項目選擇

<code>&lt;c-g&gt;</code>

取消補全

<code>&lt;c-l&gt;</code>

完成待補全項中共同的字元串

<code>&lt;c-h&gt;</code>

關閉待選項

<code>&lt;c-y&gt;</code>

<code>&lt;c-e&gt;</code>

退出待選項

<code>&lt;bs&gt;</code>

<code>" window chooser ------------------------------</code>

<code>" mapping</code>

<code>nmap - &lt;plug&gt;(choosewin)</code>

<code>" show big letters</code>

<code>let g:choosewin_overlay_enable = 1</code>

<code>-</code>

開啟視窗選擇

<code>- [</code>

選擇上一個 tab 的視窗

<code>- ]</code>

選擇下一個 tab 的視窗

更多操作可以使用 <code>:help choosewin</code>。

<code>" tabman ------------------------------</code>

<code>" mappings to toggle display, and to focus on it</code>

<code>let g:tabman_toggle = 'tl'</code>

<code>let g:tabman_focus = 'tf'</code>

<code>tl</code>

開啟/關閉 tab 管理

<code>tf</code>

将光标移動到 tab 管理視窗

<code>" airline ------------------------------</code>

<code>let g:airline_powerline_fonts = 1</code>

<code>let g:airline_theme = 'bubblegum'</code>

<code>"let g:airline#extensions#tabline#enabled = 1</code>

<code>"let g:airline#extensions#tabline#left_sep = ' '</code>

<code>"let g:airline#extensions#tabline#left_alt_sep = '|'</code>

<code>let g:airline#extensions#whitespace#enabled = 1</code>

<code>" to use fancy symbols for airline, uncomment the following lines and use a</code>

<code>" patched font (more info on the readme.rst)</code>

<code>if !exists('g:airline_symbols')</code>

<code>let g:airline_symbols = {}</code>

<code>let g:airline_left_sep = ''</code>

<code>let g:airline_left_alt_sep = ''</code>

<code>let g:airline_right_sep = ''</code>

<code>let g:airline_right_alt_sep = ''</code>

<code>let g:airline_symbols.branch = ''</code>

<code>let g:airline_symbols.readonly = ''</code>

<code>let g:airline_symbols.linenr = ''</code>

支援特性

可以顯示分支,文法靜态檢查結果等。

在這份配置中寫了個小函數根據建立的不同類型的檔案,自動插入頭部,支援<code>python</code>、<code>ruby</code>、 <code>bash</code>等。

此功能需要有 node 環境支援,可以執行 <code>npm -g install instant-markdown-d</code> 進行安裝。

<code>" vim-markdown ------------------------------</code>

<code>" disabled automatically folding</code>

<code>let g:vim_markdown_folding_disabled=1</code>

<code>" letex math</code>

<code>let g:vim_markdown_math=1</code>

<code>" highlight yaml frontmatter</code>

<code>let g:vim_markdown_frontmatter=1</code>

<code>" vim-instant-markdown -----------------</code>

<code>" if it takes your system too much, you can specify</code>

<code>" let g:instant_markdown_slow = 1</code>

<code>" if you don't want to manually control it</code>

<code>" you can open this setting</code>

<code>" and when you open this, you can manually trigger preview</code>

<code>" via the command :instantmarkdownpreview</code>

<code>let g:instant_markdown_autostart = 0</code>

<code>:instantmarkdownpreview</code>

手動觸發 markdown 檔案的預覽

在這份配置中,可以在高亮某單詞時,通過使用 <code>ctrl-n</code> 或者 <code>ctrl-p</code> 進行多遊标選擇,然後進行編輯或修改等操作。

在這份配置中,可以通過使用<code>,r</code>進行全文查找或者<code>,r</code>進行快速查找,或者在目前字元串上使用<code>,wr</code>以及<code>,wr</code>來進行全文查找或者快速查找。

完備的 python 支援,可以自動識别目前是系統環境或虛拟環境,使用<code>:isort</code>可智能對導入包進行排序,使用<code>:pymodelintauto</code>可自動格式化。

原文釋出時間為:2017-01-08

本文來自雲栖社群合作夥伴“linux中國”