2022年2月25日金曜日

vim

//@ ヴィジュアルモード
"v 移動コマンド"で選択ができる. (その後"y"(ヤンク)したり "w ファイル名"で選択部だけ保存できる)
"V" 行単位で選択する "o" 選択範囲を操作するためのマーカー切り替え "Ctr-v" 矩形選択をする
"行末選択" 矩形選択時に移動コマンドで行末へ行くと各行の行末だけ選択した事になり
       そこでAを押して挿入して復帰すると全ての行末に挿入される
"gv" 前回選択した範囲が再選択された状態でヴィジュアルモードに入る.
"Ct-g" 選択モード(標準的な使い道はあまりない。拡張向けか)
"c" 選択した範囲を削除して挿入モードに入る "r" 選択した範囲の文字が全て指定した文字に置き換わる    
":normal コマンド" で選択範囲に一挙にノーマルコマンドを適用できる.
// オブジェクト選択  (二つの記号に挟まれた構造化領域の選択)
ここでのiやaは挿入モードとは関係ないので注意
"a"はaround"i"はinsideみたいな. "t"はタグの内側<a>ここ</a>.
"vi}" カーソルが{}の間にあるなら{nakami なかみ}の中身を選択できる.
va"とかvi" と入れる事で""で囲まれた領域全体or領域内部を選択できる.
これらの範囲はv選択だけじゃなくmotionにも使えるのでcitとかできる.
"cit" HTMLタグの内部を削除して挿入モード
// テキストオブジェクト選択 iとaの違いは上の通り, 大文字と小文字は記号含むか否か
v選択の際などに"iw aw iW aW" 現在の単語. "is as ip ap" 現在の文 段落.

//@ ファイル・ウインドウ・タブ
shellからvim *.txtなどでディレクトリ上のファイルを一気に開ける。
開かれたファイルはメモリ上に配置され、これをバッファと呼ぶ。
":edit ファイル名" ファイルを開く. Tabで補完可能. "%%"アクティブなバッファのパスに展開される.
":ls"現在開いているバッファ一覧.%が現在の#が交換ファイル."Ct-^"で交換ファイルにトグルできる.
":bn"":bp"で次のバッファ、前のバッファへ"b1"バッファ1を開く.
":bufdo"で全てのバッファに対してExコマンドを実行.
":args"現在の引数リストを表示. 引数リストというバッファ群を使って現在開いているファイル群の生成・管理が可能.
":args ファイル名" /で区切ったりワイルドカードを使って複数ファイルを引数リストに追加できる.
":argdo" 引数リスト中のバッファ全てにコマンドを実行.

":w FILENAME"  現在ファイルの別名保存を作る ":w" 現ファイルの保存.
":q" ウインドウ(タブ・ファイル)を閉じる ":wq" 保存して閉じる ":q!" 保存せず閉じる.
":qa!" 警告なしで全てのウインドウを閉じる ":wr"変更されたバッファを全てディスクへ書き込む.
":e FILE" ファイル読み込み ":tab FILE" 新しいタブで開く "gt""Ctr-tab" 次のタブへ .
":r ファイル名" ファイル内容をカーソル位置に張り付ける ":new" 別のファイルを二つ目のウインドウで.
// 分割 ウインドウ
":[数字]sp,vs (ファイル)" ウインドウの"sp"横分割"vs"縦分割 [数字]付けると行(列)幅指定 ファイル名を引数にも.
 "Ctr-w" 系  (まずCtr-w を押す事で以下のウインドウ操作系のコマンドが使える.Ctrは押しっぱなしでもいい).
      "s" 横分割 "v"縦分割.
          "w" 別のウインドウへカーソル移動 "p" 一つ前のウインドウへ戻る.
          "h,j,k,l" 左、下、上、右のウインドウへ移動. "H,J,K,L"でウインドウ自体が移動.
          ">, <" 幅を増やす,減らす "+,-" 高さをふやす減らす "=" 大きさをそろえる.
          "o" または普通に":only"で現在のウインドウ以外を閉じる.
      "c"または普通に":close"で現在のウインドウを閉じる.

//@ 移動系コマンド
"Ct-e""Ct-y" ウインドウスクロール.
"gf" カーソル位置にあるファイル名へジャンプ "gF" gfの動作の後ファイル名の後に書かれた行番号へジャンプする.
"g;" 直前に変更した位置にカーソルを移動 "g," カーソル移動履歴を未来方向へ辿る.
"gi" 直前に挿入した場所へ戻って挿入モード
"jkhl"  カーソル移動だが数字入れてから入力するとその分ジャンプする. "gj"の様にgを付けると表示行単位の移動.
"H,M,L"  画面の上,画面の真ん中,画面の下へ移動.
"Ctr-u" 半画面戻る "Ctr-d" 半画面進む  "Ctr-b" 1画面戻る "Ctr-f" 1画面進む.
"w" 次の単語の頭へ向かっていく "B"単語の頭、前の単語へ向かっていく.
"e"単語の尾へ移動。既に尾なら次の単語の尾へ. "E"直前の単語末へ移動. "ge" 前の単語の末尾に後退.
"%"  対応するカッコへ移動.
0 行頭へ "^" 文字行頭へ. "$" 行末へ.   "gg" 1行目へ.  "G" 最後の行へ.
"数G(gg)",":数" その行へ.
"Ctr-o"   ジャンプした時の前の位置へ辿る (検索や行数指定移動など).  "Ctr-i" Ctr-oと逆操作.
"-"  1行上の左端へ  "Enter"  1行下の左端へ.
"(,)" 文単位での前進,後退 "{,}" 段落単位での前進,後退.
"zz"  現在地を画面の中央に持ってく.
//@  マーク&ジャンプ
"mx"  現在地にマークを設定 xはa-z か A-Zのアルファベットが使える.
大文字だとグローバルマークとなりファイル間でも移動・保持される.
"'x"  xマークのある行頭にジャンプ "`x"(Shi@) xマークにジャンプ.
システムによって自動的にマークされるマークも使える [参考: jidoumaaku]
//@  行検索(全角入力可能で実行すると半角に戻る
"fa"  行末へ向かってaを検索. ";"で次へ ","で戻る. "F"で行頭へ向かって  f,Fの替わりに"t,T"を使うと文字一歩手前へ移動.
"f "  fの後スペース入れとくと全角文でも文節ごとに";"や","で行き来できる.
//@  検索  
"/"下へ検索. "?"上へ検索. "n" 次の検索結果. "N"前の検索結果. "Ctrl o"元の場所へ戻る. "Ctrl I" 進む ".
":set hls" ハイライト. "set nohls" ハイライトオフ. "set ic"大文字対象. "setnoic"大文字対称off.
"*" 現在地にある単語を検索 .
一度検索すればいつでもnで飛べるので文章中に何かの記号を置いておけばジャンプスポットみたいにもなる.
例えばスペース区切りで飛んでいくには"/ Enter"した後に"n"
*を使えばリンクを張った目次みたいにもできる.
検索ウインドウで↑を押すと検索履歴をたどれる.
前回と同じ検索を繰り返すなら"/Enter"でOK.


//@   テキスト入力系
"u"   アンドゥ.   "C^r"  リドゥ.
"R"  上書きモード開始。Insで挿入←→上書(モード切替). "r"で一文字削除後一文字挿入.
"gR" "gr"などでタブ文字の上書きが安全な仮想置換モード使用.
"a"   現在地の前から挿入開始.   "A"  行末から挿入開始.
"i","Ins"  現在地の直前から挿入. "I"  行頭から挿入開始.
//    削除挿入系(d系との違いは挿入モード開始)開始
"s"    一文字削除して挿入開始.  
"ciw" 現在地の単語を消して挿入開始. "ce""cw" 現在地から一単語削除して挿入開始.   
"c〇"  現在地から移動コマンドを入れて削除しつつ文字入力開始 "cf〇"〇まで消して挿入開始.
"cc"   現在行を削除して挿入開始. "C" 現在地含めて行末まで消して挿入開始.
"J"     下の行と連結.
"o"    下の行に新ライン挿入して編集開始.  "O" 現在の行に新ライン挿入して編集開始.
":iab"  省略入力登録. ":iab pai 3.14" paiを3.14に展開するよう登録.
":unabbreviate pai"で登録解除. ":abbreviate"  登録一覧の表示.
//@-   挿入モードで使えるコマンド
"Ctr-h" バックスペース. "Ctr-w" 単語レベル削除.  "Ctr-u" 行頭まで削除.
"Ctr-o"  挿入モード中に1コマンドだけノーマルコマンドを使うためのコマンド.
挿入中貼り付け→[sounyuuhari]
//@    カット
"Shift-Insert"  (Windows)クリップボードから貼り付け.  "Ctr-Ins" クリップボードへコピー.
"x"     その場所の文字を削除.  "X" その場所の一つ左を削除.
"d~"   dの後に移動系コマンドを入れると現在地からその場所までを削除する.
"dn~" その移動系コマンドを使いながら消去をn回繰り返す.
"dd"   その行を削除. "ndd" n行削除. "D" カーソル位置から行末まで削除.
"diw"  その単語を削除. "daw" その単語先まで削除. "dw" カーソル位置から単語末まで削除.
"das"  文章センテンス全体削除.
//@-    ペースト(プット)    
"p" "(P)"  文字列カットの場合、"p"は現在地の直後"P"は直前へカットまたはコピーした内容をペースト.
       行単位カットの場合,"p"は現在行の下へ貼り付け"P"は現在行の上へ貼り付け.
"gp""gP"を使うと張り付けた後のカーソルの位置が変わる.
挿入中貼り付け→[sounyuuhari]
//@-    コピー(ヤンク)
"y~"  yの後に移動系コマンドを続けるとコピーされる.
"yy"   その行のコピー.
"yiw"  その単語のコピー.

//@    レジスタの利用 (マクロのレジスタと共用なので注意)
":reg" でどのレジスタがどうなっているかを見れる. ":put a"でレンジスタaの貼り付け可能.
普通にヤンクした場合はレジスタ"0"が利用される.  カット系は1-9レジスタが順に使われ流れていく.
カット・ヤンクに関わらず直前に蓄えたテキストは無名レジスタ""に保持される。
pみたいにレジスタ番号を指定しないペーストは無名レジスタを使っている。
つまりカットした履歴は流れて行ってしまうので、ある程度作業を挟むならヤンクしておき"0pという風に書けば
間にどれだけカットしててもヤンク時のデータが挿入される."レジスタ名…でレンジスタを指定できる.
// 任意のレジスタを使う
"ay  みたいに"を付けてから次に入力する文字がレジスタ名となり
"ap  みたいに頭に"つけてレジスタ指定して貼り付けられる.
大文字のレジスタ名を使うと過去のデータを上書きせずに追記になる.
"qaq"マクロに何も記録しない事でレジスタaを空にする.(globalコマンドなどで繰り返し追記する時の開始準備とかに)
// 挿入貼り付け[sounyuuhari]
挿入モードで"Ctr-r押してからレジスタキーを指定して貼り付けできる.
例"Ct-r  a"でレジスタaから"Ct-r 0" ならヤンクレジスタ "Ct-r "(←shift2)なら無名レジスタを貼り付け.
あと良く分らんが"Ctr-r Ctr-p a" でレジスタからそのまま貼り付けて(意図しないインデントは修正).
挿入モードでCtr-r= (任意式)3+4*10Enterみたいに打つと43(計算結果)が張り付けられる. =はExpressionレジスタという.
//  外部システムのクリップボードを使う
Windowsのクリップボードを張り付けるなら"Shift+Ins",コピーなら"Ctr+Ins"でできたりもするが
一般的なやり方としては
"+"とか"*"レジスタから入出力できるぽ。
シェルから利用している場合にはpasteオプションとか何か設定が必要な場合があるかも?
// 自動セットされるレジスタ…も存在し、任意に呼び出して貼り付け可能
"%"現在のファイル名"#"大体ファイル名"."直前に挿入されたテキスト":"直前に実行されたExコマンド"/"直前検索ワード


//@-  置換  Exコマンド :substitute (略称s)  通常のExコマンド同様コマンドの前にアドレス(効果範囲)を指定できる.
":%(アドレス)s(ubstitute)/置換元文字列(パターン)/置換後文字列/g(フラグ)"
デフォルトでは現在行の初めに見つかったパターンのみを置換する.
上はアドレス%でファイル全体を,フラグgで行の最初の一つ以外も対象とする例.
アドレス:10,20s/だと10~20行の範囲指定. ".,.+5"だと現在行から5行.
フラグ例 "n" マッチ数を報告 "&"直前の置換コマンドと同じフラグを使用.フラグの最初に記述しなければならない.
"c" 実行を一つづつ判定 [tikanflagc] (←参考:置換中に使えるコマンド)だが
これを使わずに検索しながらシンプルな置換↓を.コマンドで繰り返す方法もある.
":s/パタン/置換後" シンプルな(その行の初めのひとつだけ)置換.
ビジュアルモード中に":"を押すと":'<,'>"という記号が出てくるが
続けて上記の置換コマンドを完成させる事でビジュアルモードの範囲がアドレスとして使える.
"&" ":&" 最後の置換を現在行で一回行う(フラグは無視される).
":&&" フラグを無視せずに直前の置換を行う.
"g&" ":%&&" 全体に前回のフラグで置換を適用.
パターンは最後の置換ではなく最後の検索時のパターンが利用されたりする.

//@    マクロ
コピペのレジスタと共用なので注意.逆に言えば
テキストでマクロを作ってレンジスタにヤンクしてもよし
":reg" でどのレジスタがどうなっているかを見れる
"qa"  レジスタaにマクロ記録開始. "q"で記録終了. "@a"でマクロaを呼び出す. "@@"直前のマクロを呼び出す.
大文字の名前を使うと既存のレジスタを上書きせずに追記となる.
"."   さっきの作業を繰り返す(無名シンプルレジスタ).
":normal @a" で選択範囲に一挙にマクロaを適用できる.
"qaq"マクロに何も記録しない事でレジスタaを空にする.

  //マクロ利用例 (自分なりの現状設定)
 "@i" 単語先頭に合わせた状態で押すと単語末まで""で囲む "@o" @iの2単語版."@p" 選択範囲末で押すと""で囲む.
"@p"に設定しているのは
a"gvoi"gvoll
↑ 選択領域を""で囲むマクロ.
      上記のマクロは""の部分を[]など任意に置き換えれば汎用性が増す.
   マクロの登録は"q"コマンド以外にもヤンクでレジスタに入れれば良い.
"@q" []で選択対象を囲む.下はマクロの内容.
a]gvoi[gvoll
"@w" <>で選択対象をで囲む.下はマクロの内容.
a>gvoi<gvoll
"@e" ()で選択対象をで囲む.下はマクロの内容.
a)gvoi(gvoll
"@r" 「」で選択対象を囲む
a」gvoi「gvoll

"@j" 現在行の末尾に改行を入れる "u" 現在地に開業を入れる

//@    その他
"数字i" みたいに数字を指定して挿入モードに入って戻ってくると指定回数変更が繰り返される.
"." 直前のコマンドの繰り返し "u" undo "U" 現在行に対する変更の全取り消し.
":earlier 時間 単位" でその時間の状態戻る. ":earlier 10s"など.
":set nu(set nonu)" 行番号の表示(非表示).
"Ct-a""Ct-x"  カーソル行上で以降に現れた最初の数字をインクリメント/デクリメント.
"Ctr-D"  途中入力コマンドの補完候補リストアップ.  "tab" 補完.
"Ctr-G"  ファイル名や現在行を知る. "Ctr-l"  画面を再描画.


//@     EXコマンド(:から始まるコマンドラインで入力するコマンド)
ノーマルモード同様に様々な処理ができるが複数行を簡単に指定出来たり.
全文対象に実行するみたいな事が容易らしい.
 "Esc"でノーマルモードへ戻る."Ct-u"で入力途中のコマンドを削除."Ct-b"行頭へ"Ct-e"行末へ"Ct-w"単語削除 "↑"履歴[rereki]
"Tab"でコマンド補完.候補が複数ある場合はTab押す毎に切り替わる."Ct-D"で候補一覧.
"アドレス コマンド"という形式でコマンド処理の対象となるテキスト範囲をアドレス指定して実行するのが基本.
アドレスは行番号をそのまま入れていいし、3,6みたいに,で区切れば3行目から6行目の様な範囲となる.
行番号以外に以下の特殊なアドレス指定ができる.
// アドレスの例
"%"でファイル全体. "$"ファイル最終行. "0"ファイル先頭行の前の仮想的な行 "."現カーソル行 "'m"マークmがつけられた行.
"%"はファイル名も表せる(ファイル名の省略表記).
// コマンドの例
"t" コピー. "m"移動.
行対象のコピペ作業などもカーソル移動なしで直接指定できるので高速だったりする
ヴィジュアルモードから:でコマンドに移行できる事も覚えておこう
(例)"  :'<,'>m$  " mは移動,$はファイル末尾なのでこの例は指定範囲をファイル末尾へ送る.
:'<,'>後に"norm"と入れてからノーマルモードのコマンドを入れる事で指定範囲にノーマルコマンドを実行できる
例えば全ての行に対して処理が可能.
// グローバルコマンド :golobal(短縮はg)
":[range]g/パターン/コマンド" range内において特定のパターンにマッチした各行にExコマンドを実行する.
rangeはデフォルトで%(ファイル全体)
パターンを空にしておくと以前検索で使ったパターンが使われる.
コマンドはそれ自体が範囲を受け取ることができる.
コマンドをカラにしておくと:printを実行する.
":vglobal(短縮はv)"はパターンに当てはまらない行においてコマンドを実行する.
大文字レンジスタにyankする事でパターンに当てはまる複数行を蓄積可能.
":g/パターン/t$"はファイル末尾へパターンを追記していける.

// 履歴[rereki]
"@:"で直前のEXコマンドを繰り返せる.その後は同じコマンドなら"@@"で繰り返せる. "Ct-o"で操作を戻せる.
"q:" EXコマンド履歴を出す(j,kで移動Enterで実行できる他、通常のエディット同様に種々のコマンド,
     EXコマンド,範囲指定などで加工可能で"|"でコマンドを繋ぐ事もできる)
"q/" 検索履歴を出す.
"Ct-f" コマンドラインモードからコマンドラインウインドウへ切り替え.
"Ct-c" コマンドウインドウやコマンドラインからノーマルモードへ戻る方向へモードを閉じる.
       (空行からならEnter(実行)で復帰してもいい)
":changes"  変更履歴画面. "q" ノーマルへ戻る.

      
// シェルと連携
":shell"  シェルを呼び出す。 exitなどで抜ければvimに戻る カレントディレクトリが現在開いているファイルだったりするのでGUI起動した場合に便利なのかも。
":!コマンド" vimから端末のコマンドを実行する.
":r!コマンド"   端末コマンドの出力をカーソル位置に張り付ける.
"Ct-z" vimをバッググラウンド(停止・ハイド)モードにする.bashではfgコマンドで復帰できる.
//シェル入出力
割愛するが指定範囲をシェルに入出力が可能で、vimで編集中のテキストを外部コマンドで処理できたりもする.


//@     Help
https://vim-jp.org/vimdoc-ja/usr_toc.html  //vim日本語ドキュメント
":help user-manual" マニュアルを出す ("<F1>"でもOK) ":help  d" みたいにすれば dを調べる
"Ctrl ]" でタグジャンプやワードヘルプ. タグとは"|これ|"に囲まれている部分. 単にワードの上でWクリックでもいい "Ctrl t"で元の場所に戻る
シェルから "vimtutor"  とコマンド入力でチュートリアルテキストを開ける
興味深いのは折りたたみ機能


//@     設定
起動時の設定ファイル読み込み(ウインドウズ版で確認したがlinuxでもそうなのかも)
デフォルトでユーザーディレクトリみたいな場所 (Windowsの場合は$HOME/_vimrc、Mac,Linuxは$HOME/.vimrcのvimrcというファイル)から設定を読み込むが
そのファイルが見当たらなければdefaults.vimを読み込む。
defaults.vimはvimがインストールされたフォルダとかproguram-filesみたいな
とこにあったりする。
一人でシステムを使っている場合もdefaults.vimは汚さずに変な個人設定ファイル(vimrc)を作ってしまった場合のバックアップとするのが良いかも。

vimrcに"nnoremap k gk" みたいに書いておくと kをgk押したように扱うみたいにキーの置き換えが可能
"noremap <Leader>n nzz" みたいに書いておくとリーダーキーの後にnを押すとnzzの効果になる
リーダーキーと言うのはユーザー定義コマンド用のプレコマンドでデフォルトでは\(バックスラッシュ)らしい
F3でハイライト切り替え
set hlsearch!
nnoremap <F3> :set hlsearch!<CR>
":set guifont" 現在のフォント設定を見る
次回以降も同じフォントを使用したい場合は設定ファイルに次の様に書く
<半角文字の場合>
set guifont={フォント名}\ {フォントサイズ} (Linuxの場合)
set guifont={フォント名}:h{フォントサイズ} (Windows/Macの場合)
<全角文字の場合>
set guifontwide={フォント名}\ {フォントサイズ} (Linuxの場合)
set guifontwide={フォント名}:h{フォントサイズ} (Windows/Macの場合)

windows半角で試したが、h:set guifontで色々と出てくるがh(フォントサイズ)まで書けば良かった。


//  用語・雑記・補足
"バッファ" ファイルはディスクに保存されるものでバッファはメモリ上に存在するもの.

//自動マーク [jidoumaaku]
''  現在のファイルで直前に行われたジャンプ以前にいた場所
'.  直前に変更された場所.
'^  直前に挿入があった場所.
'[  直前に変更もしくはヤンクが行われた先頭.
']  直前に変更もしくはヤンクが行われた末尾.
'<  直前のビジュアルな選択範囲の先頭.
'>  直前のビジュアルな選択範囲の末尾.

// 置換フラグc 実行中に使えるコマンド [tikanflagc]
y   このマッチを置換
n   このマッチをスキップ
q   置換を終了
l   (last) このマッチを置換して終了
a   (all) これと以降の全てを置換
Ct-e Ct-y  画面上スクロール,下スクロール




0 件のコメント: