小林 未知数の備忘録
vim

vimメモ

  • vimでTeXファイルの編集中、指定した章へジャンプ

    unite.vimとunite-outlineを入れる。その後
                    :Unite outline
  • unite.vimとunite-outlineのインストール

                    mkdir /home/hoge/.vim/bundle
                    git clone https://github.com/Shougo/neobundle.vim /home/hoge/.vim/bundle/neobundle.vim
    その後、vimrcの中で
                    " Note: Skip initialization for vim-tiny or vim-small.
                    if 0 | endif
                  
                    if &compatible
                      set nocompatible " Be improved
                    endif
    
                    " Required:
                    set runtimepath+=~/.vim/bundle/neobundle.vim/
    
                    " Required:
                    call neobundle#begin(expand('~/.vim/bundle/'))
                    NeoBundle 'Shougo/unite.vim'
                    NeoBundle 'Shougo/unite-outline'
    
                    " Let NeoBundle manage NeoBundle
                    " Required:
                    NeoBundleFetch 'Shougo/neobundle.vim'
    
                    " My Bundles here:
                    " Refer to |:NeoBundle-examples|.
                    " Note: You don't set neobundle setting in .gvimrc!
    
                    call neobundle#end()
    
                    " Required:
                    filetype plugin indent on
    
                    " If there are uninstalled bundles found on startup,
                    " this will conveniently prompt you to install them.
                    NeoBundleCheck
    を加えて、vimを立ち上げるとunite.vimとunite-outlineをインストールするか訊かれる。インストールには少し時間がかかるので注意。
  • Unite outlineのバッファを常時表示

                    :Unite -winheight=15 -no-quit outline
    垂直分割なら
                    :Unite -vertical -winwidth=30 -no-quit outline
  • vimrcで

                    set tw=0
    としているにもかかわらず、全く反映されない。とりあえずIntelのFortran90プログラムを書くときに非常に厄介。

    Ubuntu16.04でインストールされるvimで新たに出現した余計なお節介。

    Fortran90の場合は.vim/after/ftplugin/の中にfortran.vimを作って、その中に
                    set tw=0
    とすれば良い。また
                    :verbose set textwidth
    でどのファイルが犯人かが分かる。もう使うことはないが、固定形式のファイルをいじくる場合は
                    if (b:fortran_fixed_source == 1)
                      setlocal comments=:!,:*,:C
                      setlocal tw=72
                    else
                      setlocal comments=:!
                      setlocal tw=0
                    endif
    とでもしておけば良いか。
  • 特定の文字あるいは文字列をタイプするとインデントされる。

    とても余計なお節介。これは
                    set noautoindent
                    set nosmartindent
    で無効にすることができない。
                    :set indentkeys
    で、どの文字列を打つとインデントされるかが分かる。これを無効化するには
                    :set indentkeys=
    とする。これもまたvimrcに書いても有効にならない。したがって
                    :verbose set indentkeys
    で犯人ファイルを特定し、.vim/after/indent/の中にそれを無効化するようなファイルを作れば良い(例えばTeXファイルならtex.vimの中に
                    set indentkeys=
    と書いておく)。ただ、こうするとあらゆるものをインデントしなくなる。例えば改行だけインデントさせたい場合は
                    set indentkeys=<Return>
    としておく。色々インデントのやり方を設定できるみたいだが、個人的には改行時のインデント以外はいらないのでこれで十分。
  • インサートモードからノーマルモードに戻ったときにFcitxを自動でオフにする。

    便利なプラグインが公開されているのでそれを利用。NeoBundleを用いてインストール。具体的にはunite-vimをインストールした際に書き込んだvimrcの部分に
                    NeoBundle 'vim-scripts/fcitx.vim'
    を加えるだけ。
  • 僕はタブ派ではなく空白派なのでvimrcにて

                    set tabstop=2
                    set expandtab
                    set shiftwidth=2
    数値はインデント時のスペースの数
  • Vim, GVimで範囲選択してもその範囲を含む行全体を選択したことになってしまう

    未だ解決が分からない。このせいで
                    :s/./&/gn
    を用いた文字数カウントが出来ないし、置換してほしくないところまで置換したりする。
  • Vim, GVimで文字数カウント

                    g Ctrl-g
  • vimでヤンクではなくコピーしたものを貼り付ける際にインデントされるのを防ぐ

                    :set paste
  • vimのカーソル移動を表示行単位で行う

    vimrcにて
                    nnoremap j gj
                    nnoremap k gk
                    nnoremap <Down> gj
                    nnoremap <Up>   gk
    ノーマルモード時のみ有効。インサートモードでは使えない。
  • 前の行末と次の行頭間の移動

    vimrcにて
                    set whichwrap=b,s,<,>,[,]
  • vimdiffで差分表示のアップデート

                    :diffupdate
  • gvimで差分表示モード

                    :vertical diffsplit 差分ファイル
  • gvimでカレントディレクトリへの移動

                    :set autochdir
  • gvimでvimrcにset autochdirを指定しているにもかかわらず反映されない

    vimrcに
                    cd %:h
    Ubuntu16.04でインストールされるvimやgvimではデフォルトでautochdirが適用されるのでこれらの対策は不要になった。
  • vimで改行の検索、改行に置換

    例(改行をhoge改行に置換)
                    :%s/\n/hoge^M/gc
    ^MはCtrl+vのあとにEnterを押すと呼び出せる
  • バッファの扱い

    バッファの表示
                    :ls
    指定したバッファへ移動
                    :b 番号
    次のバッファへ移動
                    :bn
    前のバッファへ移動
                    :bp
  • 文字コード関連

    vimの文字コード確認
                    :set enc?
    ファイルの文字コード確認
                    :set fenc?
    エンコードを指定して保存し直す
                    :set fenc=文字コード
    文字コードを指定して読みなおす
                    :e ++enc=文字コード
  • TeXファイルの編集中にset spellによるスペルチェックが効かなくなる。

    .vimディレクトリ中にafter/syntax/tex.vimというファイルを作成し、
                    syntax spell toplevel
    とする。
  • 検索した文字列の一部を置換

    例えば[1]や[2]を[[01]]や[[02]]に置換したい場合(1や2という数字は置換したくない)、ホールドバッファを用いる
                    :s/[\(.\)]/[[0\1]]/g
    とする。つまり置換したくない部分を¥(と¥)で囲んで、変換後に対して¥1で呼び出せば良い。ホールドバッファは複数指定することができ、¥1から¥9として呼び出せる。
  • 移動系はしょっちゅう忘れるのでリンク

  • Jupyter notebookをvim仕様にする

    		conda install -c conda-forge jupyter_contrib_nbextensions
                    cd $HOME/.local/share/jupyter
                    mkdir nbextensions
                    cd nbextensions
                    git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding
                    jupyter nbextension enable vim_binding/vim_binding