vim
ex command
neovim manual
cmd
----
ex commandモードのとき、レジスタからペースト
sessionは自動的にスタートする設定にすることもできる
code:session
:mksession| :mksession write session info to a file or
:source Session.vim
code:terminal
:terminal
vim のinsert,normalモードのままterminalを使える!
-----
ここで練習ができるか
vimチートシート
思考のスピード
A = a$ 行末に移動し入力モード
o Aを実行し、改行
C =c$ cut
; f word の繰り返し
, 「 ;」で通り過ぎたところををもとの位置に戻す
sはカーソルの文字削除し入力モード
I = ^i 行頭に移動し入力モード
インデント
`>
<
= 自動インデント
g~ 大文字小文字入れ替え
gu 小文字
gU 大文字
gUap パラグラフ全体を大文字化することになる
挿入モードでの操作
shellのコマンドラインで使えるキーバインドも使える
C r0 yankしたものを貼り付け
R 置換モード
r 1文字だけ置換モードになる
-----------------------------------------------------------------------------------
ビジュアルモード
gv 直前に選択した箇所を再度選択する
o 選択されているテキストのもう一方の端点に移動
vit タグ内を選択
gUit
gU it (inside the tag)
.で繰り返すときはノーマルコマンドを優先したほうが良い場合がある
C-v ブロック指向は表とかに良い
----------------------------------------------
ex command
:3d 3行目に移動して、その行を削除
:2,5p
:タグ,タグp
:6t. make a copy of line 6 and put it below the current line
:t copy to
:t. 現在地をコピーし、current line の下に挿入する =yyp
:2,4m$ 選択範囲を最終行に移動させる
--
:normalでノーマルモードとの組み合わせができる
:範囲normal . 選択範囲にnormalモードの .を実行する。
:範囲normal A;
各記号によるアドレス範囲指定
1 ファイルの先頭行
`$ ファイルの最終行
`% ファイル全体
-------------------------------------------------
shell呼び出し
!をつけてshellのコマンドを叩く~
:shellでshellモードに移行できるみたいだがspacevimではうまく行かないのか
:read !{cmd} カーソルの位置にcmdで実行した内容が挿入された!
:writeの方は?
-------------------------------------------------------------
複数ファイルの管理
vi * で複数ファイルをバッファに読み込む
:bnextで次のバッファに切り替える
:ls
C-^ で編集中のファイルと代替ファイルを切り替える
省略
:bn :bp
バッファも削除できる、インメモリを削除するわけであってファイルを削除するわけではない。
:args
:argdo 複数のバッファに対してコマンドを実行できるのか!?
バッファ
:e ファイルをバッファに読み込む(変更を取り消す)
:wa 変更されたバッファをすべてのディスクに書き込む
-----------------------------------------------------------
ワークスペースを分割ウィンドウにする
C-w s 水平方向へ分割
C-w v 垂直方向へ分割
:e {filename} でファイルをバッファに読み込む
tab, shift tab でファイルを選択できる? これはspacevimの機能か?
:split {filename} 分割しファイルをバッファに読み込む
:vsp {filename}
:sp 水平
:vsp 垂直
C-w h,j,k,lでウィンドウを切り替えられる
Ctrlを押したままwwでもウィンドウを切り替えられる
またはC-w C-w
C-w c アクティブなウィンドウを閉じる
C-w o アクティブなウィンドウだけ残し、他のウィンドウをすべて閉じる
ウィンドウのサイズ変更
C-w = すべてのウィンドウの幅と高さを同じにする
C-w _ アクティブなウィンドウの高さを最大化する
C-w | アクティブなウィンドウの幅を最大化する
{N} C-w _アクティブなウィンドウの高さを{N}行にする
{N} C-w | 幅の文字数で同様
---------------------------------------------------------
タブページ
:lcd {path} 作業ディレクトリが現在のウィンドウごとにローカルに設定される
:tabedit {filename} , :tabe 新しいタブを作成
C-w T 現在のウィンドウを独立したタブに移動する
:tabclose :tabc 現在のタブページと。そこに格納されているすべてのウィンドウを閉じる
:tabonly :tabo アクティブなタブページを残し、それ以外のタブページをすべて閉じる
タブ切り替え
Ex ノーマルコマンド
:tabn {N} {N}gt 番号{N}のタブページへ切り替え
:tabn gt
tabp gT
:tabm {N} 現在のタブを{N}番目に移動
----------------------------------------------------
検索
:find 一部入力して Tab
:e . 現在の作業ディレクトリでファイルエクスプローラをオープン
:E アクティブなバッファのディレクトリで 以下同様 (このコマンドは効かなかった)
C ^ 編集していたバッファに戻る
sudo権限がないとき
w カレントバッファの内容を、引数で指定されたファイルに送る vim のコマンド
今回の場合は、tee コマンドに送っている。
code:sudo
:w !sudo tee % > /dev/null
# % 現在開いているバッファのパス
カーソル移動
gを前置すると表示行を扱う
ea
e で単語の後ろ で aで入力
word
WORD 空白区切り
cW
検索
F 前方向
t 次にある{char}の直前の文字までカーソルを末尾方向に移動 (fで行ったときの一文字手前か)
T
dt. 現在位置から.までを削除
d/ge カーソルはgに移動するが、この文字は削除対象にならない 排他的なモーション
検索
-------
モーションの組み合わせ
vi} {の範囲内を選択
va} a arroud
ci change inside
yit yank inside tag
dit delete 同様
dw は最初の位置にカーソルを合わせないとうまく行かないよう
diw 空白が残る
daw
----------
マーク
場所をマークして、そこに戻る
m{a-zA-Z}
`{mark} その位置にカーソルを合わせる
'{mark} 最初の空白文字にカーソルを合わせる
自動マーク
' ' 直前のジャンプ以前にいた場所
' . 直前の変更箇所
' ^ 直前に挿入があった場所
; [ 直前に変更もしくはyankが行われた先頭
' ] 同様で末尾
' < 直前のビジュアルな選択範囲の先頭
' > 同様で末尾
------------------
`% 対となる記号にジャンプ
S" Surroud "
cs{[ change surround { to [ カーソルは対象の内側に入っていれば良いか
:jumps
C-o ジャンプを戻る
C-i ジャンプを進む
短距離はジャンプにならない
g; ジャンプをたどれるが、 C-oとの違いは?
g,
gの意味は?
gf
コードの海にジャンプする前にモーションつけておけば良い
--------------------------------------------------------------
レジスタ
"_d _ブラックホールレジスタ
"ayy
""d "は無名レジスタ デフォルト
"0 yank レジスタ
:reg "0 レジスタの中身を確認できる
"_diw ブラックホールレジスタに入れても良いs
"+ システムクリップボードレジスタ
"* 選択範囲レジスタ 選択したものを貼り付けられた!
"+yiw
"+P
pだと空白が残るよう
ve pでも良い dで消すわけでなく、その範囲にyankしたものを挿入し、選択範囲をyankする (レジスタのテキストを入れ替えている)
------------------------------------------------------------
マクロ
qaで aレジスタにマクロの記録が始まる qでマクロ終了
@aでaを呼び出し
@@ 直前のマクロを呼び出し
100@a で指定回数呼び出せる
選択して@aも可能 並列
qA でレジスタにマクロの続きを記録できる aならA
\v 正規表現での検索
\V 文字列での検索
\v<the> でtheを検索
:e! ファイルのバッファを読み込み直す。
----------------------------------
検索
:h hlsearch すべてのマッチが強調表示される
:h incsearch 最初のマッチ
-----------------------------------------------------
置換
:{range}sort 選択範囲をソートできる
:global 全体 どのように?
:vimgrep
-----------------------------------------------------------
キー操作
fで検索 f+tなど
cw でカーソル単語削除し、入力モード
daw delete a word
Shift+vで行を選択できる
gg 一番上
G 下
3word進む
3w
easymotion
<Leader><Leader>w
vim-commentary
gcc コメントアウト
gcap パラグラフコメントアウト
gc 選択行コメントアウト
q/ ノーマルモードで検索できる
zz - center cursor on screen
Ctrl + e - move screen down one line (without moving cursor)
Ctrl + y - move screen up one line (without moving cursor)
2yy - yank (copy) 2 lines
J - 現在の行に下の行を連結する(スペースが1文字入る)
gJ - 現在の行に下の行を連結する(スペースが入らない)
cc - 現在の行を削除して挿入モードを開始
5gU とかもいける
4V~とかも 大文字、小文字入れ替える