Vim/Neovim
Last updated
Last updated
:%s/\zsa\zeq/S/g
Shift + v
:normal yss' ('で囲むとき)
インデントがあるとうまく行かないので一度左に詰めるようにする
chi
戻るとき: col
cgn 普通に検索orアスタリスクで検索→cgn->置換したあとの文字を入力→nで移動→ドットリピート
daw カーソル位置の単語を削除(空白含む) (d + a word)
diw カーソル位置の単語を削除 (d + inner word)
^ 最後に挿入モードを抜けた場所
. 最後に変更を加えた場所
' or ` 最後にジャンプした時にいた場所
" バッファを終了した時にいた場所
0~9 vimを終了する時にいた場所
@: コマンドの繰り返し
; 移動の繰り返し(右方向)
, 移動の繰り返し(左方向)
& sコマンドの繰り返し
. 編集の繰り返し
'. 最後の編集位置へ
gv 最後のv選択位置へ
v選択後 o 選択範囲の最初/最後へ
直近開いたバッファへ
`. カーソル位置へジャンプする
g; 編集位置をさかのぼる
ctrl-f
H 画面の一番上の行へ移動
L 画面の一番下の行へ移動
Ctrl-e 1 行下にスクロール
Ctrl-y 1 行上にスクロール
Ctrl-f 1 画面下にスクロール
Ctrl-b 1 画面上にスクロール
Ctrl-d 半画面下にスクロール
Ctrl-u 半画面上にスクロール
補完機能
キーマップ
1. 行全体
CTRL-X CTRL-L
1. 行全体
CTRL-X CTRL-L
2. 現在のファイルのキーワード
CTRL-X CTRL-N
3. 'dictionary'のキーワード
CTRL-X CTRL-K
4. 'thesaurus'のキーワード, thesaurus-style
CTRL-X CTRL-T
5. 編集中と外部参照しているファイルのキーワード
CTRL-X CTRL-I
6. タグ
CTRL-X CTRL-]
7. ファイル名
CTRL-X CTRL-F
8. 定義もしくはマクロ
CTRL-X CTRL-D
9. Vimのコマンドライン
CTRL-X CTRL-V
10. ユーザ定義補完
CTRL-X CTRL-U
11. オムニ補完
CTRL-X CTRL-O
12. スペリング補完
CTRL-X s
13. 'complete'のキーワード
CTRL-N
補完を中止したいときは「CTRL-E」を押すといいらしい。
@:
&
元いた場所に戻る:
元いた場所に進む:
ctrl+vで領域選択後
c 矩形を置換
rでなくてc
バッファ番号 CTRL+^
もしくは
:buffer バッファ番号
:b バッファ番号
C-^ ... 一つ前に開いていたファイルに移動
「Ctrl-w gf」タブでファイルを開く。
タブとして開くので、ノーマルモードで「gt」で移動
Ctrl W + R - To rotate windows up/left.
Ctrl W + r - To rotate windows down/right.
Ctrl W + L - Move the current window to the "far right"
Ctrl W + H - Move the current window to the "far left"
Ctrl W + J - Move the current window to the "very bottom"
Ctrl W + K - Move the current window to the "very top"
Ctrl W + x OR Ctrl W + Ctrl x - Rotates the current focused window with
" 横分割 -> 縦分割への切り替え
CTRL-W t CTRL-W H
" 縦分割 -> 横分割への切り替え
CTRL-W t CTRL-W K
" カレントウィンドウをタブとして移動する
CTRL-W T
:vertical {cmd}
垂直分割をするようにします。例えば、:vertical split は :vsplit のような動作になります。
:leftabove {cmd} :aboveleft {cmd}
水平分割なら上に、垂直分割なら左に新しいウィンドウを作ります。
:rightbelow {cmd} :belowright {cmd}
水平分割なら下に、垂直分割なら右に新しいウィンドウを作ります。
:topleft {cmd}
水平分割なら画面の一番上に、垂直分割なら画面の一番左に、それぞれ幅、高さが最大になるように新しいウィンドウを作ります。
:botright {cmd}
水平分割なら画面の一番下に、垂直分割なら画面の一番右に、それぞれ幅、高さが最大になるように新しいウィンドウを作ります。
" :コマンドモード中にヤンクからペーストを行う
Rはレジスタと覚える
デフォルトレジスタ「"」
/:コマンドモード中にコマンド欄で検索した文字をペースト
Ctrl-W x:ウィンドウを入れ替える
:元いた場所にも取る
:元いた場所に進む
ma:現在のカーソル位置をマーク名 a に保存
'a:マーク名 a の位置に移動
zo:カーソル下にある折りたたみをひとつ開く
zO:カーソル下にある折りたたみを全て開く
zc:カーソル下にある折りたたみをひとつ閉じる
zC:カーソル下にある折りたたみを全て閉じる
zf : 選択した範囲が折り畳み
Ctrl+l
Ctrl+vで矩形選択モードにする
範囲選択したあとにCtrl+Iで入力モードにする
Ctrl+rを押して"入力でヤンクした内容をペースト
ESCで抜けて複数行に反映
]s 次のスペルミスの箇所へ移動
[s 前のスペルミスの箇所へ移動
z= 正しいスペルの候補を表示し、選択した単語でスペルミスを修正
zg カーソル下の単語を正しいスペルとして辞書登録
zw カーソル下の単語を誤ったスペルとして辞書登録
insertモードで
=
ヤンクしたあと
:wv
: 書き出し
ペーストする前に :rv!
: 読み込み
行数が足りないときは set viminfo='20,\"50
の50のところを調整する
:history
:registers
:marks
:ls (:buffers)
:args
:jumps
:changes
:tags
コマンド
ノーマルモード
挿入モード
コマンドラインモード
ビジュアルモード
map/noremap
○
-
-
○
map/noremap
○
-
-
○
nmap/nnoremap
○
-
-
-
imap/inoremap
-
○
-
-
cmap/cnoremap
-
-
○
-
vmap/vnoremap
-
-
-
○
map!/noremap!
-
○
○
-
キーマッピングのオプション
:コマンドラインへの出力を抑制します。キーマッピングからコマンドを実行する場合などに指定します。
:すでにマッピングが存在する場合、エラーにします。通常は上書きされます。
:バッファローカルなキーマッピングを定義します。を付けるとVim起動時に最初に表示されるバッファのみでしか定義されず他のバッファで使えなくなる。
:マップ先の文字列を Vim の式とみなして、評価した結果の文字列をマップ先とします。
let はecho $
set は path?
キーバインドは :help C-o
makeprg xxx
make
eg.
function! Cppcheck_1()
setlocal makeprg=cppcheck --enable=all %
" earlier it was: " setlocal errorformat=[%f:%l]:%m
" fixed by an advise by Mr. Ingo Karkat
setlocal errorformat+=[%f:%l] -> %m,[%f:%l]:%m
let curr_dir = expand('%:h')
if curr_dir == ''
let curr_dir = '.'
endif
echo curr_dir
execute 'lcd ' . curr_dir
execute 'make'
execute 'lcd -'
exe ":botright cwindow"
:copen
endfunction
map, noremapはs:xxxの代わりににしなくては動かない
.: The current buffer
w: Buffers in other windows
b: Other loaded buffers
u: Unloaded buffers
t: Tags
i: Included files
実行中に をタイプすると部分一致検索モードから正規表現検索モードにスイッチします。入力した文字を正規表現パターンとしてファイルを検索出来ます。
もう一度タイプすると通常モードに戻ります。また でフルパスモードからファイル名モードへ、 でMRUファイル検索、 でバッファ検索へとスイッチ出来ます。
cscopeかccglueをインストールしておく
:Unite output
map
.clangにパスを書く -I/usr/local/include
の形式
.lvimrcとかだとあとから読まれるため反映されない。
pathに追加してもいけるが、これも.vimrcに記述する必要がある。
~/.vim/syntax/quickrun.vim
vim-quickrun/autoload/quickrun/outputter/buffer.vim
コメントアウト省力化
c
nmap / NERDCommenterToggle
vmap / NERDCommenterToggle
過去ソースを参照しつつ修正
:Gdiff
:Gblame
クオートとかを便利に入力
コマンド
動作
ds'
文を囲んでいる ' を消す
ds'
文を囲んでいる ' を消す
di'
' で囲まれた部分を消す
cs'"
' を " に変更
ci'
' で囲まれた部分を消して, インサートモードに入る
S'
ビジュアルモードで選択した部分を ' で囲む
yss'
文を ' で囲む
ysiw'
カーソルがある単語を ' で囲む
ds ・・・ d(delete)s(surround)
di ・・・ d(delete)i(inside)
cs ・・・ c(change)s(surround)
ci ・・・ c(change)i(inside)
yss ・・・y(yank)s(surround)s(sentence)
ysiw ・・・ y(yank)s(surrond)iw(inner word)
yank時に内容を一時表示するプラグイン
置換時にundoできるプラグイン
%s:/xxx/yyy/gcで確認しながら置換する際にNで戻ることができない。
これを実現する。
検索時に一周した場合画面にわかりやすく大きく表示するプラグイン
デフォルトのコマンド出力をMoreよりもわかりやすくするプラグイン。検索できたりとか
tagsの結果をunite ->unite-tag があるがデフォルトの方が使いやすい。。。
cscopeの結果をunite-cscopeがあるがデフォルトの方が使いやすい。。。
tabで重複してファイルを開くとすでにあるタブが開かれる
検索時のハイライトをカレントウィンドウだけにする
insert modeの入力をrepeat(".")に加えないようにする
コマンドhistoryでwとかqとかを表示しないようにするプラグイン
これが近いが、q:で表示されてしまう。viminfoにいれないようにしたい
kana/vim-altr.git
kana/vim-filetype-haskell.git
kana/vim-niceblock.git
kana/vim-operator-replace.git
kana/vim-operator-user.git
kana/vim-submode.git
kana/vim-textobj-entire.git
kana/vim-textobj-fold.git
kana/vim-textobj-indent.git
kana/vim-textobj-line.git
kana/vim-textobj-syntax.git
kana/vim-textobj-user.git
普通にpすると一行したに挿入されてしまう。 そういうときはvp。ビジュアルモードにしてから貼り付ければ途中に貼り付けられる。改行はされるが、Jで結合する。
vim -X --startuptime /tmp/speedcheck.txt
最小構成
sort -k3 /tmp/speedcheck.txt
echo "scale=3; $(vi --startuptime /tmp/stime_mine.log -c 'quit' > /dev/null && tail -n 1 /tmp/stime_mine.log | cut -d ' ' -f1) / $(vi -u DEFAULTS --startuptime /tmp/stime_def.log -c 'quit' > /dev/null && tail -n 1 /tmp/stime_def.log | cut -d ' ' -f1)" | bc | xargs -i echo {}x slower your Vim than the default.
vi -c 'profile start profile.log' -c 'profile func *' -c 'call timer_start(0, {->execute("quit")})'; cat profile.log
viの設定ではなくmozc(google日本語入力)で対応する。
keymapのカスタマイズで新しいエントリとして「直接入力、入力文字なし」->キャンセル後IME無効化
で設定できる。
プラグイン利用時に必要になる(+lua等)が使えるvimをインストールする
ubunut
Centos
perlは有効にできなかった
接頭辞
意味
g:varname
指定の変数をグローバル変数として指定
g:varname
指定の変数をグローバル変数として指定
s:varname
指定の変数をカレント・スクリプト・ファイルのローカル変数として指定
w:varname
指定の変数をカレント・エディター・ウィンドウのローカル変数として指定
t:varname
指定の変数をカレント・エディター・タブのローカル変数として指定
b:varname
指定の変数をカレント・エディター・バッファーのローカル変数として指定
l:varname
指定の変数を現行関数のローカル変数として指定
a:varname
指定の変数を現行関数のパラメーターとして指定
v:varname
指定の変数を Vim 事前定義変数として指定
接頭辞
意味
&varname
Vim オプション (定義がある場合はローカル・オプション。そうでなければグローバル・オプション)
&varname
Vim オプション (定義がある場合はローカル・オプション。そうでなければグローバル・オプション)
&l:varname
ローカル Vim オプション
&g:varname
グローバル Vim オプション
@varname
Vim レジスター
$varname
環境変数
silent
let unduplist=filter(copy(list), 'index(list, v:val, v:key+1)==-1')
let validlist=filter(copy(list), "v:val !~ '^$'")
global: get(g:, 'aaa')
script local: exists('s:xxx')
あるなしなら グローバルでも exists('g:xxx') でいいが、中身を精査したい場合はgetのほうがいい
コマンド
意味
[ c
次の違いがある場所にジャンプ diff put
] c
前の違いがある場所にジャンプ diff obtain
do
今開いてるバッファに他のバッファの差分を取り込む :diffget と同じ
dp
もう一つのバッファに今開いてるバッファの差分を入れる。:diffput と同じ
resize -3
vertical resize -3
set noequalalways
:s/[ ]\+/aaa/g
exists('*xxx')
echo exists('&xxx')
シングルクオートが必要なので注意
00 01 02 03 04
-> 0x00 0x01 0x02 0x03 0x04
単語置換 :%s/\(\w\w\)/0x\1/g
三重の中括弧
折りたたみのデフォルトマーカー
CIのときなどに使用
echo "" | v -c "q" |& grep "Press ENTER" | wc -l
最長一致
_,
最短一致
_.{-}
hi WarningMsg ctermfg=white ctermbg=red guifg=White guibg=Red gui=None
Ctrl-Right
Ctrl-O k
if exists(':PlugInstalla') | qall | else | cq | endif
:cq
pathを設定する
先頭のスラッシュを除去する
:put %
:r! basename %
:=file
以下のものは同一視される
==
==
==
ウィンドウ::今見えている領域。splitを含む(splitすると1つのバッファに2つのウィンドウが表示される)。qで閉じる部分。
バッファ:基本的には1つのバッファ=1つのファイルです。:buffersで確認できる。
基本的にはできない。工夫するしかない。プラグインも思わしくない
:syntax on
vimでQuickFixListのような特殊なウィンドウをいじろうとしたら出た
:set modifiable
:set write
noremapは他でmapを変更していても素のvimの設定をマッピングする(再割当てしない)。
mapは他で変更していた場合は変更されたあとの設定となる(再割当てする)。
素のvimのマッピングを変更したいときはnoremapを使おう!
があるときはmapを使おう!
範囲選択<,'>を消しているらしい
" au BufUnload call DiagnosticsPreviewWindowCloseWhenLeave()
" au BufWinLeave call DiagnosticsPreviewWindowCloseWhenLeave()
au BufDelete call DiagnosticsPreviewWindowCloseWhenLeave()
BufWinLeave でもBufDelete でもいけるっぽい
vim -V9logfile.log
bashのCtrl-rみたいなことをやりたい場合
You can use q/ just like q: to view the search history.
Ctrl+eを押す
恒久的には
noremap pumvisible() ? "a" : ""
sudo apt-get install vim-gnome
を入れるとCLI版も更新される
:'<,'>:s/\%Vhoge/foo/g
verbose imap <CR>
DISPLAYが設定されてたりしたらOSC52が使われなかったりする
とりあえずxorg-x11-xauthとxclip or xselをいれて、DISPLAY設定して、 クライアント側で、 xauth list
でトークン取得して サーバー側で、 xauth add ${DISPLAY} . (token)
が一番手っ取り早くていい気がする。
wshada!
で直る模様。。。
わかってる人
centos7
centos6.5