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として呼び出せる。
移動系はしょっちゅう忘れるのでリンク
JupyterLabをvim仕様にする
pip install jupyterlab-vim