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 %:hUbuntu16.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