SublimeからVimへの移行を体験してください





この記事では、テキストを移動したり編集したりする複雑さをすべて開示しているわけではありません。 基本的な動きはvimtutorで学ぶことができ、他の組み合わせはその過程で研究されます。 プログラミングプロセスで特に重要なそれらのいくつかについては、後で説明します。



長い間、私は崇高な(約4年)を主な開発環境として使用していましたが、最近何かが変わりました。ブラインド9本指印刷方法をマスターしました。 その瞬間、私は不快なマウスや矢印に手を伸ばす人々を理解し始めました。 「ホーム」ポジションから指を離すことは不自然で非生産的になりました。 それからヴィンテージをオンにしました。 問題は無関係になったようですが、何かが欠けていました。 なぜvimに移行したのかは覚えていませんが、中括弧(MatchParen)が目立ち、カーソルがどのように見えるかはいつも好きでした。 サーバーの設定ルールが真である前にVimを試しましたが、すべての「魔法」は挿入モードへの切り替えとエディターの保存/終了に限定されていました。



最初に理解する必要があるのは、vimがそのまま使用できるのは構成の編集にのみ適していることです。コードを快適に操作するには、いくつかのプラグインをインストールする必要があります。 私は33を十分に持っていました。vimでの作業を単純で直感的なものにするために、崇高な振る舞いを完全にコピーするという目標を設定しませんでした。 このガイドでは、インストールされているすべてのプラグインと設定について説明します。設定により、プラグインとvim自体の操作がより便利になります。 必要なプラグインは公式ウェブサイトで見つけることができますが、私はvimawesomeが好きです 。 環境はUbuntu 16.04およびコンソールvim 7.4です。



すべてのプラグインはgithubにあり、特定のプラグインのインストールまたは使用に関する簡単なガイドを見ることができます。詳細な説明は参考になります。 プラグインの説明から、その使用方法が明確でない場合は、確実に、ホットキーセクションに目的の組み合わせが表示されます。 〜/ .vimrcまたは〜/ .vim / vimrcにすべての設定を設定します。ファイルが存在しない場合は作成します。 始めましょう。



くるくる
プラグインを手動でインストールするのは良いことではありません。 Vundleはパッケージマネージャーとして機能し、その中には病原体vim-plugなどもあります。 Vundleのみを使用したため、どちらが便利かはわかりません。 あなたの裁量で選択してください。



インストールされたプラグイン

// set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() // let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' // common Plugin 'scrooloose/nerdtree' Plugin 'valloric/youcompleteme' Plugin 'xolox/vim-easytags' Plugin 'majutsushi/tagbar' Plugin 'tpope/vim-fugitive' Plugin 'easymotion/vim-easymotion' Plugin 'ctrlpvim/ctrlp.vim' Plugin 'terryma/vim-multiple-cursors' Plugin 'vim-airline/vim-airline' Plugin 'vim-airline/vim-airline-themes' Plugin 'scrooloose/nerdcommenter' Plugin 'matze/vim-move' Plugin 'raimondi/delimitmate' Plugin 'mattn/emmet-vim' Plugin 'scrooloose/syntastic' Plugin 'tpope/vim-surround' Plugin 'sirver/ultisnips' Plugin 'honza/vim-snippets' Plugin 'xolox/vim-session' Plugin 'xolox/vim-misc' Plugin 'SyntaxAttr.vim' Plugin 'dyng/ctrlsf.vim' Plugin 'rking/ag.vim' Plugin 'godlygeek/tabular' // php Plugin 'stanangeloff/php.vim' Plugin 'sumpygump/php-documentor-vim' Plugin 'arnaud-lb/vim-php-namespace' // javascript Plugin 'pangloss/vim-javascript' // html Plugin 'othree/html5.vim' // twig Plugin 'evidens/vim-twig' // css Plugin 'mtscout6/vim-tagbar-css' // colors Plugin 'damage220/solas.vim' Plugin 'nanotech/jellybeans.vim' Plugin 'mhartington/oceanic-next' call vundle#end()
      
      



チーム

 //     :PluginList //   :PluginInstall //    :PluginClean //    :PluginSearch foo
      
      



設置

 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
      
      



依存関係

 git  curl
      
      



ソラス
私が試したすべての色のテーマの中で、 ジェリービーンズは最も好きでしたが、しばらくして自分のテーマを作成することにしました。 幸いなことに、すべてのグループの名前を見つけることは難しくありませんでした。残念ながら、端末はカラーパレットが非常に限られており、通常256色をサポートしています。 SolasはPhpStormの標準テーマに基づいています。

動く
プラグインは 、現在の行または選択した行を上下に移動するように設計されています。



ユーザー設定

 //     <Cj>  <Ck> let g:move_key_modifier = 'C'
      
      



オタク
ファイルシステムで動作するように設計された最も人気のあるプラグイン 。 ファイルとディレクトリを作成、移動、削除するための便利なホットキーを追加します。



ユーザー設定

 //       let NERDTreeAutoDeleteBuffer = 1
      
      



php-documentor
プラグインは、クラス、クラスプロパティ、関数のドキュメントブロックを作成します。

php
プラグインは、改善された構文サポートを提供します。 定数、クラス、および関数のリストをバージョン5.6に更新しました。

html5
プラグインは、改善された構文とパディングのサポートを提供します。

javascript
プラグインは、改善された構文とパディングのサポートを提供します。

小枝
プラグインは、小枝テンプレートのサポートを追加します。

逃亡者
gitの便利なラッパーは、多くのコマンドを提供します。

究極の
プラグインはvimスニペットサポートを追加します。



便利な組み合わせ

 <Tab> -  
      
      



スニペット
ほとんどのプログラミング言語用のスニペットのセット



依存関係

 snipmate  ultisnips
      
      



構文attr
プラグインは、構文グループ、hiリンク、およびグループの色を表示します。 独自の配色を作成するための便利なプラグイン。

ctrlp
3年間、私はあいまい検索に非常に慣れてきたので、この機会がない開発はほとんど想像できません。 私の記憶では、これは私がインストールした最初のプラグインでした。 Ctrlpは、タグ、ファイル、バッファー、および最後のアクティブなファイルを検索します。



チーム

 //      ( Ctrl + R  sublime) :CtrlPBufTag
      
      



便利な組み合わせ

 <Cj>  <Ck> -        <Enter> -     <Ct> -     <Cv> -   / (  ) <Cx> -   / (  ) <Cd> -         
      
      



ユーザー設定

 //  , CtrlP      ,    ,    "repo",    : // project/src/Repository/Repository.php // project/src/Repository/Foo.php // CtrlP      Foo.php.  , CtrlP,       vim'a,   .      let g:ctrlp_by_filename = 1 //   . w -  ,     CVS (.git, .svn). r -   (pwd). let g:ctrlp_working_path_mode = 'wr' //  ,    ,     <Cp>,  ..      (  ),     . let g:ctrlp_map = '' //      let g:ctrlp_buftag_types = { \'php': '--php-kinds=icdf' \}
      
      



依存関係

      ctags
      
      



タグバー
私は崇高なミニマップが好きで、それを見ればすぐにファイル構造を理解できます。 当然、vimでも同じものが欲しかったのですが、プラグインはvim-minimapと呼ばれています。 残念ながら、プラグインはまったく好きではありませんでした 。 代替手段が必要でしたが、見つかりました-tagbar 。 プラグインは、現在のファイル内のタグのリストを表示し、それらをグループ化し、必要な順序で並べ替えます。



ユーザー設定

 //    ,      ,     let g:tagbar_sort = 0 //    /   let g:tagbar_iconchars = ['+', '-'] //   let g:tagbar_map_close = '<Cm>' //     let g:tagbar_type_php = { \'ctagstype': 'php', \'kinds': [ \'i:interfaces', \'c:classes', \'d:constants', \'f:functions' \] \}
      
      



依存関係

 ctags
      
      



tagbar-css
このプラグインは、タグバーにcss、less、およびscssのサポートを追加します。 プラグイン自体をインストールすることに加えて、次の行を〜/ .ctagsに記述します

 --langdef=css --langmap=css:.css.less.scss --regex-css=/^[ \t]*@([A-Za-z0-9_-]+)/@\1/v,var,variables/ --regex-css=/^[ \t]*\.([A-Za-z0-9_-]+)/.\1/c,class,classes/ --regex-css=/^[ \t]*#([A-Za-z0-9_-]+)/#\1/i,id,ids/ --regex-css=/^[ \t]*(([A-Za-z0-9_-]+[ \t\n,]+)+)\{/\1/t,tag,tags/ --regex-css=/^[ \t]*@media\s+([A-Za-z0-9_-]+)/\1/m,media,medias/
      
      



依存関係

 tagbar
      
      



イージーモーション
私の意見では最高のプラグインの一つ 。 ほんの数文字を入力するだけで、コードを瞬時にナビゲートできます。



ユーザー設定

 //     let g:EasyMotion_smartcase = 1 //   (        ) let g:EasyMotion_do_shade = 0 //     hi link EasyMotionTarget Search
      
      



ご注意

  easymotion    ,   ,     ,      . Vim ,     ,      ,     .
      
      



セッション
このプラグインは、標準コマンドmksessionのラッパーを提供することにより、セッションの操作をより便利にします。



チーム

 //  .        <Cz>,   "!"   , , "OpenSession! name" :OpenSession name //   :SaveSession name
      
      



ユーザー設定

 //    .  ,    vim   let g:session_autoload = 'yes' //   let g:session_autosave = 'yes' //    5  let g:session_autosave_periodic = 5 //      let g:session_autosave_silent = 1 //       let g:session_default_to_last = 1
      
      



依存関係

 misc
      
      



その他
セッション作業に必要なプラグイン
エメット
エメットについてはあまりにも多くのことをここに書きます。



ユーザー設定

 //      <Ce> let g:user_emmet_expandabbr_key = '<Ce>'
      
      



区切る
プラグインは、角かっこまたは引用符の間でインデントします。



ユーザー設定

 //      enter let delimitMate_expand_cr = 1 //      . " |"   " | " let delimitMate_expand_space = 1 //  html,   >:<,     au FileType vim,html let b:delimitMate_matchpairs = "(:),[:],{:},<:>,>:<"
      
      



シンタスティック
構文をチェックするためのプラグイン 。 次の設定を行うことをお勧めするreadmeでは、議論しないでください。



ユーザー設定

 let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0
      
      



NERDCommenter
コードにコメントするためプラグインから、次の動作を実現したいと考えました:コードのセクションをコメントアウトするには、<C-?>を使用します。 私が覚えている限りでは、インストールしたすべてのプラグイン(約4)のうち、どれも正確にこのタスクを実行しませんでした。 コードのコメントを解除するには、標準の組み合わせ-\ <Leader \> cu、ここで\ <Leader \>-"、"を使用する必要があります。 これは標準キーではなく、デフォルトは「\」です。 それ以外の場合、崇高と同じ動作。



ユーザー設定

 //    ()  let g:NERDSpaceDelims = 1
      
      



航空会社
プラグインは、ニーズに合わせて簡単にカスタマイズできる便利なステータスバーを表示します。 プラグインにタブの外観を制御させることもできます。 正しく動作させるには、パッチを適用したフォントが必要です 。これはこちらから入手できます



ユーザー設定

 // solarized     ,     let g:airline_theme='solarized' //    let g:airline_powerline_fonts = 1 //    let g:airline#extensions#tabline#enabled = 1 //   tabline let g:airline#extensions#tabline#tab_min_count = 0 //   ,    sublime:      -   ,       ,     let g:airline#extensions#tabline#formatter = 'unique_tail' //   let g:airline#extensions#tabline#show_buffers = 0 //   +  :help filename-modifiers let g:airline#extensions#tabline#fnamemod = ':t' //         . ,   ,  ,     trailing-spaces   :     (  phpDoc).       . ,  . let g:airline_section_warning = '' let g:airline_section_error = '' //  "X"     (!?) let g:airline#extensions#tabline#show_close_button = 0 //     let g:airline#extensions#tabline#left_alt_sep = '' //  tagbar let g:airline#extensions#tagbar#enabled = 0 //    let g:airline#extensions#tabline#show_tab_nr = 1 //     let g:airline#extensions#tabline#tab_nr_type = 1
      
      



航空会社のテーマ
航空会社のテーマのセット



依存関係

 airline
      
      



完成
YCMは、ファジー検索を使用した高速なコード補完を提供します。 すべての中で最も「重い」プラグインであり、インストールするのが最も不快です。 重量は275.9 mbで、エディターの起動が大幅に遅くなります。 比較のために、他のすべてのプラグインは合わせて15.1 MBを占有します。 プラグインが機能するためには、pythonサポートでコンパイルされたvimが必要です。 確認するには、vim --version | 端末でgrep "+ python"を実行します。 ソースからコンパイルしたくないのですが、幸いなことに私のリポジトリには、スクリプト言語をサポートするパッケージ「vim-nox」があります。



ユーザー設定

 // ycm     , , -,  3     -  . let g:ycm_server_python_interpreter='python' //    , ,      ")" let g:ycm_autoclose_preview_window_after_completion = 1 //  ultisnips  tab    let g:ycm_key_list_select_completion = ['<Down>']
      
      



設置

    ,   "install.py"   ,   help.
      
      



複数のカーソル
名前はそれ自体を物語っています- プラグインを使用すると、同時に複数のカーソルを操作できます。



チーム

 //    :MultipleCursorsFind pattern
      
      



便利な組み合わせ

 <Cn> -      <Cp> -      <Cx> -        //  ,     ,    : c -       I -    A -   
      
      



ctrlsf
長い間、私はプロジェクト全体で行の置換を実装する方法の考えに怖がっていました。 そして無駄に-vimには、必要な機能を提供する素晴らしいプラグインが(そしてほとんどすぐに)見つかりました。 次のコマンドを入力するだけです:CtrlSF pattern [filemask]と、すべてのエントリを含むウィンドウが開きます。 通常のファイルとして編集し、保存します(:w)。 その後、プラグインは確認を求め、変更されるファイルの数を示します。 \ <Esc \>を押すと、データがコミットされることに注意してください。 ただし、変更をいつでも元に戻して(u)、バッファーを再度保存できます。 複数のカーソル、特にコマンド:MultipleCursorsFindに適しています。 CtrlSFはack / agを抽象化したものなので、これらのプラグインの1つをインストールする必要があります。 agをインストールするには、以下をお読みください。



チーム

 :CtrlSF foo *.php
      
      



便利な組み合わせ

 <Cj>  <-k> -      
      
      



ユーザー設定

 //    let g:ctrlsf_position = 'right'
      
      



依存関係

 ack  ag
      
      



ag
ラップオーバーシステムag。 著者によると、並列化により、agはackよりも34倍速く、 より詳細に動作します。 プラグインを機能させるには、ag自体をインストールする必要があります。 Ubuntuでは、パッケージはsilversearcher-agと呼ばれます。

php-namespace
「use」演算子を使用したより便利な作業のためのプラグイン 。 タグファイルを使用して必要なクラスを有効にします。



依存関係

 ctags,  -.
      
      



サラウンド
プラグインを使用すると、テキストを囲む引用符、角かっこ、またはxmlタグを追加、置換、または削除できます。 ys、cs、ds-フレーミング文字の挿入、置換、削除にそれぞれ使用されます。



便利な組み合わせ

 ds' -    dst -    cs'" -      ysiw" -      ysiw<a> -     <a>
      
      



プラグインは、テキストを特定のパターン(たとえば、「=」または「|」)に揃えます。 私は美容コードのファンではありませんが、最近、英語で時々チートシートを作成したとき、プラグインは非常に便利でした。



チーム

 //     "|" :Tabularize /|
      
      



ctags
CtrlP、TagBar、php-namespaceなどのプラグインを使用するには、プログラムのソースコードを分析するための強力なユーティリティであるctagsが必要です。 Ctagsは、クラス、関数、変数などの名前とその位置を含むタグファイルを作成します。 Ctags 5.9はそのままで43言語をサポートしていますが、正規表現で拡張できます(tagbar-cssを参照)。



便利なキー

 //    --list-languages //      --list-kinds=lang
      
      



設置

        . ,  ubuntu -  exuberant-ctags
      
      



ご注意

       - "tags.vendor"       "tags"
      
      



イージータグ
タグファイルは多くの情報を提供しますが、手作業で作成するのは楽しい仕事ではありません。 Easytagsを使用すると、ルーチンを省くことができます。一度登録するだけで、UpdateTags -Rが新しいプロジェクトに追加され、プラグインはその後のすべての変更にインデックスを付けます。



ユーザー設定

 //      ,  ~/.vimtags let g:easytags_file = './tags' //    let g:easytags_auto_highlight = 0 //  (:help autocmd-events),   easytags let g:easytags_events = ['BufWritePost'] //   vim    - let g:easytags_async = 1
      
      



依存関係

 ctags
      
      





各プラグインを詳細に説明するのは非常に難しく、おそらく理由はありません。 すべてのチームをリストするのは意味がありません。使用したチームについてだけ説明しましたが、それなしでは記事は非常に膨大でした。 次に、エディター自体の機能を見てみましょう。



設定
詳細については、 ヘルプ設定を参照してください。

 //    ,  ,  tabstop  shiftwidth   set tabstop=4 set shiftwidth=4 set softtabstop=4 //       set autoread //   set autoindent set smartindent //    .  ,         10j,  set rnu //     set laststatus=2 // ,  vim       . // ,   vim'e   "df",     "d"     , //   "f",      "d". set timeoutlen=500 //     .   ,        , //   ,         .   ,    ,    <Esc> //         ,   ,   . set ttimeoutlen=0 //     .   <C-6>   , vim    "Insert"  "Insert (lang)", //      .     ,     . set keymap=russian-jcukenwin set iminsert=0 set imsearch=0 //   set encoding=utf-8 set termencoding=utf-8 //  swap-.    ,      set noswapfile //     ,       , vim  swap-, //     CursorHold.  ,  tagbar,      . //   swap-   ,     (  - 4000). set updatetime=500 // :vsplit    set splitright // :split    set splitbelow //    vi set nocompatible //  -    set tags=./tags; //    .       ,  ctrlsf,  CtrlSF. //     ,   \C      set ignorecase // ,    , vim  ,     , hidden    set hidden //      set hlsearch //        set incsearch //  ,     set cursorline //  c    set pumheight=10 //      .         set fillchars+=vert:\ //  mapleader  ",",   - "\" let mapleader="," //    Vundle filetype off filetype plugin on filetype plugin indent on //    syntax enable //    set background=dark //    colorscheme solas
      
      



キーボードショートカット
組み合わせを作成するための構文は、ご想像のとおり、次のとおりです。

 [[mode]nore]map keys command
      
      



modeは、組み合わせが機能するモードまたは環境です

nore(非再帰的)-組み合わせを「開かない」が、デフォルト値を使用する

 :map j gg // j = gg :map Q j // Q = gg :noremap W j // W = j <CR> - enter <C> - Ctrl
      
      



組み合わせの割り当ての詳細をご覧ください。

 //   ""   df. "d"   ,  "j" // ,  "jj"    ,    ,      imap df <Esc>l //       , ,  return nnoremap 2o o<CR> //  ,    ,     nnoremap 2O O<Esc>O //     nnoremap tm :tabm +1<CR> //     nnoremap tM :tabm -1<CR> //     nnoremap <Ch> :noh<CR> //    map <C-?> <plug>NERDCommenterComment //  ,     map <C-_> <plug>NERDCommenterToggle //  phpDoc  , ,  nnoremap <Cd> :call PhpDoc()<CR> //     nnoremap <Cm> :TagbarToggle<CR> //    nnoremap <Cp> :NERDTreeToggle<CR> //  syntax group   ,     .       nnoremap <Cg> :call SyntaxAttr()<CR> //     <Cj>  <Ck>      ,  <Cn>  <Cp> inoremap <Cj> <Cn> inoremap <Ck> <Cp> cnoremap <Cj> <Cn> cnoremap <Ck> <Cp> //  use autocmd FileType php noremap <Cu> :call PhpInsertUse()<CR> //  ~/.vimrc nnoremap <F4> :tabe ~/.vimrc<CR>:tabm 0<CR> //  ~/.vimrc    nnoremap <F5> :w<CR>:so $MYVIMRC<CR>
      
      



キーの標準的な動作を変更するというアイデアは好きではありませんが、次の組み合わせが自分にとって非常に便利であることがわかりました。 文字列(fおよびF)で検索文字を使用することはめったになく、JやKなどのコマンドを使用したことはありません。

 //      nnoremap KH //      nnoremap JL //    nnoremap H gT //    nnoremap L gt //    nnoremap F :CtrlP<CR> nnoremap ff :CtrlP<CR> // find tag -      nnoremap ft :CtrlPBufTag<CR> // find buffer -    nnoremap fb :CtrlPBuffer<CR> // find symbol -       nmap fs <Plug>(easymotion-s) // find line -       nmap fl <Plug>(easymotion-sl) // find current -       nnoremap fc :NERDTreeFind<CR> // find pattern -     nnoremap fp :CtrlSF
      
      



私にとって最も困難な作業は、youcompletemeインストールし、タブ切り替え<Alt-n>を設定することでした 。これには5時間かかりました(5、Karl!)。 書きませんでした:<Alt-1>、<A-1>、<M-1>、^ [1-エスケープシーケンス(<Cv>、Alt + 1)。 :help :map-alt-keys, ~/.inputrc set convert-meta on. , xterm . Gnome-terminal , SO. , , , , , . , :

 for c in range(1, 9) exec "set <A-".c.">=\e".c exec "map \e".c." <A-".c.">" let n = c - '0' exec "map <M-". n ."> ". n ."gt" endfor
      
      



- , , - ( , , ), .

いくつかの標準的な組み合わせ
 //    .  vim,    "clipboard".  ,  vim --version | grep "+clipboard"    <Cr> * //      zz //     ( -) <C-]> //         <C-]> <Ct> //   (d)  (y) .           <Cr> "
      
      



略語
Vim , .vimrc «abbr help tab help» «help», , vim «tab help». «», <Cv>.


おわりに:vimは、他に類を見ない自由を与えます。 Emacsは競争できるかもしれませんが、まだ動作していません。崇高からvimへの移行は、4本の指(覚えている限り)から9本の指への再トレーニングを思い出させます。誤解しないでください、崇高は素晴らしいエディターです。つまり、最初は通常の速度を失います。時間が経過すると、生産性は以前のレベルに戻り、この瞬間から速度が上がります。私が崇高に使用した主な機能はすべて、何らかの形でvimに移行しました。 vimlを使用して、組み合わせを解決し、エディターの標準機能を拡張します。メインOSをWindowsからUbuntuに変更することを思い出させる別の機能があります。 Windowsでは、おそらく10回、おそらく端末を使用しました。言えない私にとって何かが足りなかった、すべてが私と一緒にうまくいった。しかし、Linuxに切り替えると、コンソールコマンドを自由に使用できるようになります。意識的ではなく(これは重要です)、特定の問題を解決するためのツール(bash)を入手します。 vimでは、特定の問題の解決策を探すために何かを絶えずグーグルする必要があります。非常に頻繁に、key:valueのスタイルで、崇高なエディタまたは同様のエディタの通常のセットアップとは異なるソリューションがあります。文字通り、エディターをプログラムします。ほとんどすぐに、変数を初期化する方法、少し後で-この設定を特定の種類のファイルに適用する方法、さらに後で-イベントをリッスンする方法またはループを作成する方法がわかります。少しずつ情報を取得すると、vimlについてのアイデアを得ることができ、すぐに最初のプラグインを作成できます。もちろん、これはすべて、その言語のドキュメントを開くだけで学習できますが、私は言わなければならない、私はPythonまたはAPIの崇高さを学びたいという欲求を持っていなかった。個人的には、vimは私にとって嬉しい驚きをたくさん救ってくれたと確信しており、私の.vimrcは、このエディターで作業している間、常に変化するようです。



いくつかの質問
1. , airline , , , . - , , , . , , ?

2. readme nerdtree , / g:NERDTreeDirArrowExpandable g:NERDTreeDirArrowCollapsible. , "+" "-", nerdtree . - ?

3. youcompleteme omnicompletion? , <Cx><Co>.

4. php- "<?php", "<", vim ">". php-? - :

 au FileType php set matchparen-=<
      
      



.vimrc全体
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" common
Plugin 'scrooloose/nerdtree'
Plugin 'valloric/youcompleteme'
Plugin 'xolox/vim-easytags'
Plugin 'majutsushi/tagbar'
Plugin 'tpope/vim-fugitive'
Plugin 'easymotion/vim-easymotion'
Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'terryma/vim-multiple-cursors'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'scrooloose/nerdcommenter'
Plugin 'matze/vim-move'
Plugin 'raimondi/delimitmate'
Plugin 'mattn/emmet-vim'
Plugin 'scrooloose/syntastic'
Plugin 'tpope/vim-surround'
Plugin 'sirver/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'xolox/vim-session'
Plugin 'xolox/vim-misc'
Plugin 'SyntaxAttr.vim'
Plugin 'dyng/ctrlsf.vim'
Plugin 'rking/ag.vim'
Plugin 'godlygeek/tabular'

" php
Plugin 'stanangeloff/php.vim'
Plugin 'sumpygump/php-documentor-vim'
Plugin 'arnaud-lb/vim-php-namespace'

" javascript
Plugin 'pangloss/vim-javascript'

" html
Plugin 'othree/html5.vim'

" twig
Plugin 'evidens/vim-twig'

" css
Plugin 'mtscout6/vim-tagbar-css'

" colors
Plugin 'damage220/solas.vim'
Plugin 'nanotech/jellybeans.vim'
Plugin 'mhartington/oceanic-next'

call vundle#end()

" settings
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoread
set autoindent
set smartindent
set rnu
set laststatus=2
set timeoutlen=500
set ttimeoutlen=0
set keymap=russian-jcukenwin
set iminsert=0
set imsearch=0
set encoding=utf-8
set termencoding=utf-8
set updatetime=500
set noswapfile
set splitright
set splitbelow
set nocompatible
set tags=./tags;
set ignorecase
set hidden
set hlsearch
set incsearch
set cursorline
set pumheight=10
set fillchars+=vert:\ 
let mapleader=","
filetype off
filetype plugin on
filetype plugin indent on
" autocmd CompleteDone * pclose

" color
syntax enable
set background=dark
colorscheme solas

" abbreviations
abbr help tab help

" mappings
imap df <Esc>l
nnoremap 2o o<CR>
nnoremap 2O O<Esc>O
nnoremap tm :tabm +1<CR>
nnoremap tM :tabm -1<CR>
nnoremap KH
nnoremap JL
nnoremap H gT
nnoremap L gt
nnoremap F :CtrlP<CR>
nnoremap ff :CtrlP<CR>
nnoremap ft :CtrlPBufTag<CR>
nnoremap fb :CtrlPBuffer<CR>
nmap fs <Plug>(easymotion-s)
nmap fl <Plug>(easymotion-sl)
nnoremap fc :NERDTreeFind<CR>
nnoremap fp :CtrlSF 
nnoremap <Ch> :noh<CR>
map <C-?> <plug>NERDCommenterComment
map <C-_> <plug>NERDCommenterToggle
nnoremap <Cd> :call PhpDoc()<CR>
nnoremap <Cm> :TagbarToggle<CR>
nnoremap <Cp> :NERDTreeToggle<CR>
nnoremap <Cg> :call SyntaxAttr()<CR>
inoremap <Cj> <Cn>
inoremap <Ck> <Cp>
cnoremap <Cj> <Cn>
cnoremap <Ck> <Cp>
autocmd FileType php noremap <Cu> :call PhpInsertUse()<CR>
nnoremap <F4> :tabe ~/.vimrc<CR>:tabm 0<CR>
nnoremap <F5> :w<CR>:so $MYVIMRC<CR>

" map <alt+n> to navigate through tabs
for c in range(1, 9)
	exec "set <A-".c.">=\e".c
	exec "map \e".c." <A-".c.">"

	let n = c - '0'
	exec "map <M-". n ."> ". n ."gt"
endfor

" nerdtree
let NERDTreeAutoDeleteBuffer = 1

" move
let g:move_key_modifier = 'C'

" youcompleteme
let g:ycm_server_python_interpreter='python'
let g:ycm_autoclose_preview_window_after_completion = 1
let g:ycm_key_list_select_completion = ['<Down>']

" emmet
let g:user_emmet_expandabbr_key = '<Ce>'

" airline
let g:airline_theme='solarized'
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#tab_min_count = 0
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline#extensions#tabline#show_buffers = 0
let g:airline#extensions#tabline#fnamemod = ':t'
let g:airline_section_warning = ''
let g:airline_section_error = ''
let g:airline#extensions#tabline#show_close_button = 0
let g:airline#extensions#tabline#left_alt_sep = ''
let g:airline#extensions#tagbar#enabled = 0
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#tab_nr_type = 1

" easymotion
let g:EasyMotion_smartcase = 1
let g:EasyMotion_do_shade = 0
hi link EasyMotionTarget Search
hi EasyMotionTarget2First ctermfg=202 ctermbg=None cterm=None
hi EasyMotionTarget2Second ctermfg=202 ctermbg=None cterm=None

" session
let g:session_autoload = 'yes'
let g:session_autosave = 'yes'
let g:session_autosave_periodic = 5
let g:session_autosave_silent = 1
let g:session_default_to_last = 1

" NERDCommenter
let g:NERDSpaceDelims = 1

" html
au BufNewFile,BufRead *.tpl set filetype=html syntax=php

" syntastic
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

" tagbar
let g:tagbar_sort = 0
let g:tagbar_width = 35
let g:tagbar_iconchars = ['+', '-']
let g:tagbar_map_close = '<Cm>'
let g:tagbar_type_php = {
	\'ctagstype': 'php',
	\'kinds': [
		\'i:interfaces',
		\'c:classes',
		\'d:constants',
		\'f:functions'
	\]
\}
let g:tagbar_type_javascript = {
\'ctagstype':'JavaScript',
	\'kinds' : [
		\'f:functions',
		\'c:classes',
		\'m:methods',
		\'p:properties'
	\]
\}

" delimitmate
let delimitMate_expand_cr = 1
let delimitMate_expand_space = 1
au FileType vim,html let b:delimitMate_matchpairs = "(:),[:],{:},<:>,>:<"

" NERDTree
" let g:NERDTreeDirArrowExpandable = '+'
" let g:NERDTreeDirArrowCollapsible = '-'

" ctrlp
let g:ctrlp_by_filename = 1
let g:ctrlp_working_path_mode = 'wr'
let g:ctrlp_map = ''
let g:ctrlp_buftag_types = {
	\'php': '--php-kinds=icdf'
\}

" ctrlsf
let g:ctrlsf_position = 'right'

" easytags
let g:easytags_file = './tags'
let g:easytags_auto_highlight = 0
let g:easytags_events = ['BufWritePost']
let g:easytags_async = 1 
ide as as ide
: « vim'e , ide?», , .



あなたが熱心なvim'erであるなら、あなたはchromeのために次の拡張機能を好むかもしれません:



ヴィミアム
, .

わさび
vim'a . , \<Insert\>, <C-enter> ().



PS:ネイティブのコメントシンボルviml(二重引用符)の代わりに、「//」を使用することにしました。vimlはハブ上になく、同様のコードコメントを持つ言語があるかどうかわからないからです。

PS2:一部の組み合わせは、「\」記号によってエスケープされるため、パーサーはそれらをhtmlタグと見なしません。preタグはブロックで、その方が良いと判断されました。



UPD:SOLASのGUIサポートが追加されました。



All Articles