Open23

Vimコマンド・キーマップ・プラグイン

youichiroyouichiro

スクロール系

zz 現在の行を画面の中央になるようにスクロール
zt 現在の行を画面の最上行になるようにスクロール
zb 現在の行を画面の最下行になるようにスクロール

<C-y> 1行上にスクロール
<C-e> 1行下にスクロール

<C-y>はCtrl+yのこと

youichiroyouichiro

インサートモードからノーマルモードに戻る

Esc もしくは <C-[> もしくは <C-c>

<C-[>Escと同じだが、<C-c>Escとは異なり、キャンセルしてインサートモードに戻る挙動になる
https://yuta84q.hatenadiary.org/entry/20101216/1292508997

youichiroyouichiro

👍
正確にはEscと挙動が違うんだけど、そのことを書いておいた

youichiroyouichiro

カーソル移動系

文字単位
h 左に移動
j 下に移動
k 上に移動
l 右に移動

単語単位
w 1単語先に移動
b 1単語前に移動
e 単語の末尾に移動

空白区切り単位
W 次の空白に移動
B 前の空白に移動
E 次の空白の前の単語の末尾に移動

行単位
0 行頭に移動
^ 空白以外の行頭に移動
$ 行末に移動

文単位
) 1文分上に移動
( 1文分下に移動

段落単位
} 1段落分上に移動
{ 1段落分下に移動

youichiroyouichiro

画面移動系

<C-b> 1画面分上に移動
<C-f> 1画面分下に移動

<C-u> 半画面分上に移動
<C-d> 半画面分下に移動

H 画面の最上行に移動
M 画面の中央行に移動
L 画面の最下行に移動

youichiroyouichiro

検索系

行単位
f{char} カーソルから右側にある{char}に移動
F{char} カーソルから左側にある{char}に移動
; 直前の行単位検索を繰り返す
, 直前の行単位検索を逆方向に繰り返す

ファイル単位
* カーソル位置の単語を下方向に検索
#カーソル位置の単語を上方向に検索
g* カーソル位置の単語(部分一致)を下方向に検索
g# カーソル位置の単語(部分一致)を上方向に検索
% 対応するカッコに移動
/{patter} {pattern}に部分一致する箇所を下方向に検索
?{patter} {pattern}に部分一致する箇所を上方向に検索
n 直前のファイル単位検索を繰り返す
N 直前のファイル単位検索を逆方向に繰り返す

youichiroyouichiro

ウィンドウ操作系

ウィンドウ分割
<C-w>s 水平方向に分割 (split)
:sp 水平方向に分割
<C-w>v 垂直方向に分割 (vertical)
:vs 垂直方向に分割
:new 水平方向に分割して新規ファイルを開く
:vnew 垂直方向に分割して新規ファイルを開く

ウィンドウ移動
<C-w>h 左のウィンドウに移動する
<C-w>j 下のウィンドウに移動する
<C-w>k 上のウィンドウに移動する
<C-w>l 右のウィンドウに移動する
<C-w>w 次のウィンドウに移動する

ウィンドウの入れ替え
<C-w>x 現在のウィンドウと次のウィンドウを入れ替える (exchange)

ウィンドウサイズの変更
<C-w>_ 垂直に最大化する
<C-w>| 水平に最大化する
<C-w>= サイズを揃える
<C-w>> 幅を増やす
<C-w>< 幅を減らす
<C-w>+ 高さを増やす
<C-w>- 高さを減らす

youichiroyouichiro

操作した後にインサートモードに切り替える系

a カーソルの後ろに移動 → インサートモード
A 現在の行の行末に移動 → インサートモード
I 現在の行の行頭に移動 → インサートモード
c{motion} {motion}で指定したテキストを削除 → インサートモード
C カーソル位置から行末までを削除 → インサートモード
s カーソル位置の1文字を削除 → インサートモード
S 現在の行のテキストを全て削除 → インサートモード (ccと同じ)
o 現在の行の下に新しい行を挿入 → インサートモード
O 現在の行の上に新しい行を挿入 → インサートモード

NOTE
cw カーソル位置から1単語分削除 → インサートモード

TIPS
caw カーソル位置の単語を削除してインサートモード
A;<Ecs>j. 行末に;を挿入して次の行に移動し、.で繰り返す

youichiroyouichiro

削除・置換系

削除
d{motion} {motion}で指定したテキストを削除
D カーソル位置から行末までを削除
x カーソル位置の1文字を削除
X カーソル位置の1文字前を削除
J 現在の行と次の行を連結

置換
r{char} カーソル位置の1文字を{char}に置換
R Replaceモードに切り替える

NOTE
dd 現在の行を削除
db 前の1単語を削除

TIPS
daw カーソル位置の単語を削除

youichiroyouichiro

ビジュアルモード

v 文字選択モード
V 行選択モード
<C-v> 矩形選択モード
gv 直前の選択範囲を再度選択する
o 選択範囲のもう一方の端点に移動する

TIPS
viw カーソル位置の1単語を選択
Vr- 現在の行の全てのテキストを-に置換

youichiroyouichiro

インデント系

>> インデントを1段下げる
<< インデントを1段上げる
= インデントを揃える

TIPS
gg=G ファイル全体のインデントを揃える

youichiroyouichiro

ヤンク・ペースト・アンドゥ

ヤンク
y{motion} {motion}で指定したテキストをヤンク
Y 現在の行のテキストをヤンク (yyと同じ)

ペースト
p カーソルの後ろにペースト
P カーソルの前にペースト

アンドゥ
u アンドゥ(1つ戻る)
<C-r> アンドゥをアンドゥ

youichiroyouichiro

インサートモードのキーマップ

<C-n> カーソル位置の単語でコードヒンティングを出す
<C-p> カーソル位置の単語でコードヒンティングを出す

<C-t> インデントを1段下げる
<C-d> インデントを1段上げる

<C-u> 行頭からカーソル位置までを削除
<C-w> カーソル位置の単語の先頭からカーソルの前までを削除

<C-x><C-e> 1行下にスクロール
<C-x><C-y> 1行上にスクロール

<C-x><C-i> 単語を補完

参考
https://qiita.com/34ro/items/6163f595785ae99a632a

youichiroyouichiro

プラグインのインストール

vim-plugを使っています

https://github.com/junegunn/vim-plug

インストール

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
     https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

使い方

~/.vimrcに以下の設定を追加

call plug#begin()

" ここにインストールしたいプラグインを列挙する
Plug 'scrooloose/nerdtree'

call plug#end()

プラグインのインストール

.vimrcを再読み込みして:PlugInstallを実行するとインストールが開始する

プラグインのアンインストール

.vimrcからPlugの行を削除したのち:PlugCleanを実行する

youichiroyouichiro

ディレクトリツリー

NERDTreeを使っています

https://github.com/preservim/nerdtree

インストール

Plug 'preservim/nerdtree'

使い方

:NERDTreeToggleでディレクトリツリーを表示/非表示する

ファイルを選択した状態で
Enter ファイルを開く
t 新規タブで開く
T 新規タブで開き、移動はしない
i 水平分割して開く
gi 水平分割して開き、移動はしない
s 垂直分割して開く
gs 垂直分割して開き、移動はしない

カスタム設定

" <C-n>でNERDTreeを表示/非表示する
nnoremap <silent><C-n> :NERDTreeToggle<CR>

" 隠しファイルを表示する
let NERDTreeShowHidden = 1

" デフォルトでツリーを表示させる
let g:nerdtree_tabs_open_on_console_startup=1

" 他のバッファをすべて閉じた時にNERDTreeが開いていたらNERDTreeも一緒に閉じる。
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

タブを移動してもNERDTreeを維持する

NERDTreeはタブで独立に状態を維持しているため、タブを移動すると表示されなくなります
jistr/vim-nerdtree-tabsをインストールすることでタブを移動してもNERDTreeを維持することができる

https://github.com/jistr/vim-nerdtree-tabs

Plug 'jistr/vim-nerdtree-tabs'
youichiroyouichiro

マーク機能

m[a-zA-Z] markする
[a-zA-Z] マークに移動
:marks マーク一覧
:delmarks [a-zA-Z] マークを削除
:delmarks! マークを一括削除

youichiroyouichiro

fern.vim

インストール

Plug 'lambdalisue/fern.vim'

使い方

:Fern .: ファイラーを開く
j, k: 上下に移動
l: フォルダを展開する、ファイルを開く
h: フォルダを閉じる
<CR>: フォルダを開く
D: ファイルを削除
m: move
N: ファイルを作成
K: ディレクトリを作成
!: 隠しファイルを表示/非表示
E: 垂直分割してファイルを開く
R: ファイル名変更
y: ファイルパスをヤンク

youichiroyouichiro

markdown

インストール

" markdown syntax highlight
Plug 'tpope/vim-markdown'
" markdown preview (:PrevimOpenでブラウザが起動する)
Plug 'previm/previm'
Plug 'tyru/open-browser.vim'