MarkdownとBullet Journal

いわゆるプログラマーのつぶやき

【Linux】Vim,vi

vimコマンド一覧表(自分用)

オペレーター

c         変更する
d         削除する
y         yankする
~         大文字小文字を入れ替える (‘tildeop’がセットされていれば)
g~        大文字小文字を入れ替える
gu        小文字にする
gU        大文字にする
!         外部プログラムでフィルターする
=         インデントを整形する
gq        テキストを整形する(幅を80に収めたり)
g?        ROT13で暗号化する

>         右にインデントする
<         左にインデントする
zf        折畳みを作成(foldを定義する)
g@        ‘operatorfunc’に設定された関数を呼び出す

モーション

h         左へひとつ  10hと打つと10進む
j         下へひとつ
k         上へひとつ
l         右へひとつ
gj        下へひとつ 表示上の行移動
gk        上へひとつ 表示上の行移動

b         前の[count]個目のwordの先頭に移動
B         前の[count]個目のspace WORDの先頭に移動
w         次の[count]個目のwordの先頭に移動
W         次の[count]個目のspace WORDの先頭に移動
ge        前の[count]個目のwordの末尾に移動
gE        前の[count]個目のspace WORDの末尾に移動
e         次の[count]個目のwordの末尾に移動
E         次の[count]個目のspace WORDの末尾に移動
0         行頭に移動(空白文字も含む)
^         行頭の非空白文字に移動
$         行末に移動(カウントがある場合は[count]-1行)
_g_       行末の非空白文字に移動(カウントがある場合は[count]-1行)

+         下の行の先頭へ
-         上の行の先頭へ

f{char}   右に向かって[count]番目の{char}に移動
F{char}   左に向かって[count]番目の{char}に移動
t{char}   右に向かって[count]番目の{char}の1つ左の文字に移動
T{char}   左に向かって[count]番目の{char}の1つ右の文字に移動
;         [count]回、最後のf、F、t、Tを繰り返す
,         [count]回、最後のf、F、t、Tを反対方向に繰り返す

gg        ファイルの先頭にジャンプ
G         ファイルの最終行にジャンプ
[count]gg [count]行目の最初の非空白文字にジャンプ
[count]G  [count]行目の最初の非空白文字にジャンプ
(         前の[count]個目の文にジャンプ
)         次の[count]個目の文にジャンプ
{         前の[count]個目の段落にジャンプ
}         次の[count]個目の段落にジャンプ
H,M,L     画面の先頭/真ん中/末尾にジャンプ
%         対応する記号にジャンプ(デフォルトは([{}]))
[count]go ファイルの先頭から[count]バイト目にジャンプ
gf        カーソル位置に記述されているファイル名にジャンプ
C-j       カーソル位置に記述されているキーワードの定義にジャンプ
'{mark}   マークした行の行頭にジャンプ
`{mark}   マークした行の文字位置にジャンプ

テキストオブジェクト

iw        現在の単語を選択
aw        現在の単語+前後どちらかの空白を選択
iW        現在の空白区切り単語を選択
aW        現在の空白区切り単語+前後どちらかの空白を選択
is        現在の文を選択
as        現在の文+前後どちらかの空白を選択
ip        現在の段落を選択
ap        現在の段落+前後どちらかの空行を選択
i)        () ブロックの内部を選択
a)        () ブロックを選択
i}        {} ブロックの内部を選択
a}        {} ブロックを選択
i]        [] ブロックの内部を選択
a]        [] ブロックを選択
i>        <> ブロックの内部を選択
a>        <> ブロックを選択
i”        "" の内部を選択
a”        "" を選択
i’        '' の内部を選択
a’        '' を選択
i`        `` の内部を選択
a`        `` を選択
it        html、xmlのタグの内部を選択
at        html、xmlのタグを選択

その他コマンド

p         プット(ペースト)
.         リピート(マイクロマクロ)
u         変更を元に戻す(undo)
C-r       変更をやり直す(redo)

C-b       一画面上にスクロール
C-f       一画面下にスクロール
C-u       画面半分上にスクロール
C-d       画面半分下にスクロール
C-y       画面を1行上にスクロール
C-e       画面を1行下にスクロール
z<Enter>  文字カーソルの行が最上行となるようスクロール
z.        文字カーソルの行が中間行となるようスクロール
z-        文字カーソルの行が最下行となるようスクロール
zt        文字カーソルの行が最上行となるようスクロール
zz        文字カーソルの行が中間行となるようスクロール
zb        文字カーソルの行が最下行となるようスクロール

C-o       ジャンプリストの中の[count]個古いカーソル位置に移動
C-i       ジャンプリストの中の[count]個新しいカーソル位置に移動
g;        変更してきた箇所に戻る
g,        変更してきた箇所に進む
~         カーソル下の文字の大文字/小文字を切り替え
*         カーソル下の単語を前方検索
n         最後の検索を[count]回繰り返す、*と組み合わせて使用すると便利*
N         最後の検索を逆方向に[count]回繰り返す

yy        [count]行をヤンク
dd        [count]行を削除
cc        [count]行を削除して、挿入モードに切り替え
D         カーソル下から[count]-1行末まで削除
C         カーソル下から[count]-1行末まで削除して、挿入モードに切り替え
S         [count]行を削除して、挿入モードに切り替え
s         カーソル下の[count]文字を削除して、挿入モードに切り替え
r{char}   カーソル下の文字を{char}に置換
C-a       カーソル下またはそれ以降の数値を[count]加算
C-x       カーソル下またはそれ以降の数値を[count]減算
>>        現在行を1インデント増やす
<<        現在行を1インデント減らす
J         [count]行を空白を挟んで連結
gJ        Jと基本は同じだが、空白を挿入しない

検索移動

/         順方向に文字列検索
?         逆方向に文字列検索
n         順方向に繰り返し検索
N         逆方向に繰り返し検索

レジスタ一覧

- ""      :  無名レジスタ。d,c,x,yなど一般的な作業で入る
- "a - "z :  指定レジスタに格納
- "A - "Z :  指定レジスタに追記
- "0      :  yankでのコピー
- "1 - "9 :  数行以上の削除・変更したテキストが入る(1が最も新しい)
- "-      :  1行未満の削除・変更したテキストが入る
- "*      :  クリップボードと繋がる*
- ":      :  直近に実行されたコマンドラインEXモードのコマンドを格納
- "%      :  編集中のファイル名(カレントファイル名)
- "#      :  代替ファイルレジスタ
- "/      :  最終検索パターン用レジスタ。:let @/ = "文字列"」で入れ替え
- "=      :  Expressionレジスタ 
- ".      :  最後に挿入されたテキストが格納
- "_      :  消去専用レジスタ_ 

マクロ一覧

q{a-z,A-Z}        マクロの記録を開始(指定レジスタに登録・追記(大文字))
q                 記録の終了
@{a-z,A-Z}        マクロの実行(指定レジスタ)
@@                直前に呼び出したマクロの実行

マーク一覧

:marks            mark一覧を表示する
m[a-zA-Z]         カーソル位置をmarkする
``                直前のマークへ移動
`.                直前に変更された場所へ移動
`^                直前に挿入があった場所へ移動
`[                直前に変更もしくはヤンクが行われた先頭へ移動
`]                直前に変更もしくはヤンクが行われた末尾へ移動
`<                直前のビジュアルな選択範囲の先頭
`>                直前のビジュアルな選択範囲の末尾
C-o               古いマークへ移動(何回も可能)
C-i               新しいマークへ移動(何回も可能)
`[a-zA-Z]         指定のマークに移動
'[a-zA-Z]         指定のマークの行頭に移動
:delmarks [a-Z]   マークの削除
:delmarks!        マークの一括削除

バッファリスト一覧

:ls          バッファリストを表示
:bt         最初のバッファに移動
:bp         前のバッファに移動
:bn         次のバッファに移動
:bb         最後のバッファに移動
:b [1-99]     指定のバッファに移動
:bd         バッファリストからの削除
:bw         バッファの削除

引数リスト一覧

:ar  glob             *.mdなどglobで指定したファイルを一斉に開く
:ar  `cat file名`  1行ずつファイル名を記載したファイルで一斉に開く
:ar         引数リストを表示
:argdo      1つのコマンドを引数リスト中の各バッファに実行する
:fi         先頭ファイルのバッファに移動
:p          前のバッファに移動
:n          次のバッファに移動
:la         末尾ファイルのバッファに移動

短縮形

:ab <短縮形> <展開後テキスト>    短縮形を登録
:unab <短縮形>                   短縮形を削除
:ab                              短縮形一覧

マッピング機能

:map [a-Z,0-9,!"#$%&'] [command]   キーとコマンドのマッピングを登録
:unmap  [a-Z,0-9,!"#$%&']          キーのマッピングを削除
:map                               キー一覧を表示

正規表現(初級編)

- 位置を表す正規表現
^             行頭を表す
$             行末を表す
\<            語頭を表す
\>            語末を表す

- 1文字を表す正規表現
.             任意の1文字を表す
[a-zA-Z]      英字の1文字
[0-9]         数字の1文字
[0-9A-Za-z]   英数字の1文字
[a-z]         英小文字の1文字
[A-Z]         英大文字の1文字
\w            なにかしらの文字にマッチ
\n            改行にマッチ
\t            タブにマッチ
\s            空白にマッチ
^$            空行にマッチ

- 繰り返しを表す正規表現
*             直前の文字の0回以上の繰り返しを表す
\{<n>\}       直前の文字の<n>回の繰り返しを表す
\{<n>,<m>\}   直前の文字の<n>回以上<m>回以下の繰り返しを表す

- エスケープ処理
\ 直後のメタ文字の特別な意味を打ち消す 
\^ ,  \$ ,  \. ,   \* ,  \[ ,  \] ,  \/ ,  \~ ,  \\

その他

C-l                              画面を再描画する

分割window

C-w s         現在のウィンドウを水平分割し、現在のバッファの内容を新しいウィンドウでも利用する
C-w v         現在のウィンドウを垂直分割し、現在のバッファの内容を新しいウィンドウでも利用する
:sp           現在のウィンドウを水平分割し、fileを新しいウィンドウに読み込む
:vp           現在のウィンドウを垂直分割し、fileを新しいウィンドウに読み込む
C-w s         オープンされているウィンドウでフォーカスを順次切り替えていく
C-w h         左のウィンドウにフォーカス
C-w j         右のウィンドウにフォーカス
C-w k         上のウィンドウにフォーカス
C-w l         下のウィンドウにフォーカス
C-w =         すべてのウィンドウの幅と高さを同じにする
C-w |         アクティブなウィンドウの幅を最大化する
C-w -         アクティブなウィンドウの高さを最大化する
[N]C-w |      アクティブなウィンドウの幅を[N]文字にする
[N]C-w -      アクティブなウィンドウの高さを[N]文字にする
:clo  C-w c   アクティブなウィンドウを閉じる
:on   C-w o   アクティブなウィンドウだけを残し他を全て閉じる

ウィンドウ移動
C-w J         カレントウィンドウを最下段に移動する
C-w K         カレントウィンドウを最上段に移動する
C-w H         カレントウィンドウを最左列に移動する
C-w L         カレントウィンドウを最右列に移動する

C-w r         ウィンドウ位置を下・右へ回転させる
C-w R         ウィンドウ位置を上・左へ回転させる

ウィンドウのサイズ変更
:res[ize] +[N] カレントウィンドウの高さを指定した行数分増加させる
:res[ize] -[N] カレントウィンドウの高さを指定した行数分減少させる

:res[ize] [N] カレントウィンドウの高さを指定した行数分にする(省略すると最大まで)
:vertical res[ize] [N] カレントウィンドウの幅を指定した桁数分にする(省略すると最大まで)

C-w +         カレントウィンドウの高さを1行分増やす
C-w -         カレントウィンドウの高さを1行分減らす

C-w >         カレントウィンドウの幅を1桁分減らす
C-w <         カレントウィンドウの幅を1桁分増やす

例)
10C-w + のように複数回分指定することもできる

タブページ

:tabe filename  filenameを新しいタブでオープンする
C-w t           現在のウィンドウを独立したタブに移動する
:tabc           現在のタブページとそこに格納されているすべてのウィンドウを閉じる
:tabo           アクティブなタブページを残しそれ以外のタブページを全て閉じる
:tabn  {N}gt    番号{N}のタブページに切り替え
:tabn  gt       次のタブページに切り替え
:tabp  gT       前のタブページに切り替え
:tabm  [N]      タブページの位置移動、[N]=0は先頭、[N]省略は末尾へ移動

:tabnew filename  ファイルを指定して開く
:E  select t      netrwで開きたいファイルを選択して「t」を押す。
:tab ba           すべてのバッファをタブで開く
:tabs             開いているタブとそこに含まれるバッファ一覧を表示
:tabf (:tabfind)  引数で find して新規タブで開く
:tabm (:tabmove)  引数(数値)+1番目にタブを移動させる
:tabd (:tabdo)    :bufdo のタブ版、後戻りのできない系のコマンドなので勇気が必要
:tab XXX          XXX というウィンドウが開かれる系のコマンドを、新規タブで開くようにする

ファイルパスを用いて開く

:e %<Tab>       アクティブなバッファの相対パスがファイル名を含めて全て表示される
:e %:h<Tab>     アクティブなバッファの相対パスがファイル名無しで表示される

名前を指定してファイルを開く

:set path+=folder名/**    先に対象となるフォルダをパスにセットする **でサブフォルダもOK
:find filename            カレントディレクトリ及びパスの通ったディレクトリから開く

存在していないディレクトリにファイルを保存

:mkdir -p $:h             エラーが発生した場合。-pは中間ディレクトリも作成する指示
:w

netrw

:E              netrwを起動
:e .            カレントバッファ
:e DIR          カレントバッファ
:Ex(plore) DIR  カレントバッファ
:Tex(plore) DIR 新タブ
:Hex(plore) DIR 水平分割した下ウインドウ
:Sex(plore) DIR 水平分割した上ウインドウ
:Vex(plore) DIR 垂直分割した左
:Lex(plore) DIR カレントタブの左側

移動
j                下に移動
k                上に移動
Enter            ディレクトリの場合は移動、ファイルの場合はカレントバッファに開く

-                重要  一つ上のディレクトリに移動
u                undo、1つ前のディレクトリに戻る
U                redo、uで戻る前のディレクトリに戻る
/文字            重要  検索
c                重要  Netrwのカレントディレクトリを、現在開いているディレクトリに変更
                       Newrwを終了したら、Newrwを起動したディレクトリになる
                       

ファイルを開く
Enter            今netrw.vimで開いているバッファの上にファイルを開く
o                水平分割で、ファイルを開く
v                垂直分割で、ファイルを開く
t                重要  タブで、垂直分割で、ファイルを開く
:e ファイル名    重要  ファイルを作成して編集
                       事前にcコマンドでカレントディレクトリを変更しておくこと
x                標準アプリで起動

ファイル操作
d                ディレクトリを作成する
D                ディレクトリ・ファイルを削除する

ファイル操作(マーク)
1 「mt」でターゲットディレクトリを指定
2 「mf」でファイルをマーク
3 「mc」でコピー
  「mm」で移動
  「mg」で、vimgrep
  「md」で、vimdiff

マークする
mf               ファイルをマークする
mr               ワイルドカードを指定してファイルをマークする
mu               すべてのマークを解除

マーク後の処理
mt               コピー・移動先のディレクトリをマークする
mc               mfしたファイルをmtしたディレクトリにコピーする
mm               mfしたファイルをmtしたディレクトリに移動する
mx               マークファイルにシェル実行。コマンド中の“%“がファイル名
md               マークファイルにvimdiffを実行。ファイルは3つまで
mg               マークしたファイルにvimgrepで検索
D                マークしたファイル、ディレクトリを削除

その他
:!               重要  コマンドを実行 :!rm -rf xxxx :!mv xxx yyy :!vi xxxx
:sh              重要  シェルを起動。exitでnetrwに戻ってくる

表示
I                ヘッダの表示トグル
i                ファイルツリーの表示形式を変更
p                ファイルをプレビューする
a                すべて表示 → 隠しファイル非表示 → 隠しファイルのみ表示
gh               ドットで始まるファイルの表示・非表示を切り替える
s                ソートの種類を変更(名前 → 時間 → ファイルサイズ)
r                ソートの順番を逆にする

ブックマーク 注意:TreeViewで表示していると移動できない。
mb               ディレクトリ/フォルダをブックマークに追加する
qb               ブックマークと移動履歴の一覧を確認する
数字qb           数字で指定したブックマークに移動