LoginSignup
0
1

More than 5 years have passed since last update.

vi自分用メモ

Last updated at Posted at 2017-05-01

vi自分用メモ

 viを使うにあたり、自分が忘れそうだったり調べたことをまとめる文書。
 なお、viの操作を体系的に学びたい場合は入門vi 第6版がとても詳しいので、そちらをお勧め。

編集効率を上げるTips

空白を含む検索

 シングルクォートまたはダブルクォートでくくる。

  • /'hoge hoge'
  • /"hoge hoge"

 あるいは空白をバックスラッシュする。

  • /hoge\ hoge

vi編集中にUNIXコマンドを実行したい

 コロンに続けてUNIXコマンドをタイプすることで実行可能。

 :shでシェルを実行することもできる

 任意の行をコマンドの入力として渡して、出力結果で入替ることも可能。:1,4!sortとすると1~4行目をsortに渡して、その4行をsortの出力と入替る。

しおりを挟めたい

コマンド 効果
mx 現在の位置にxというマークをつける(xは任意の1文字)
'x (シングルクォート)+xで、xとマークした行の先頭にカーソル移動
` x (バッククォート)+xで、xとマークした文字にカーソル移動
`` (バッククォート2個)移動して直前のマークまたは文脈の位置に戻る
'' (シングルクォート2個)直前のマークまたは文脈のある行の先頭に戻る

単語の略記

 単語の省略形を登録し、それをタイプすると自動的に展開されるようにできる。

書式
:ab abbr phrase
  • abbr:phraseの省略形 (※phraseに登場する文字列を避けたほうがよい)
  • phrase:任意の文字列

 入力例は次の通り。

:ab sugdwb super ultra great delicious wonderful bomber
キー入力 展開された結果
sugdwb super ultra great delicious wonderful bomber

 単語の略記の注意点について。

  • :unab abbr とすることで、abbrが展開されることを防ぐ
  • :ab とだけすると、現在定義されている省略形の一覧表示
  • 略記したいフレーズの末尾にある文字列は省略形として使えない
  • 略記したいフレーズに含まれる文字列は省略形として使えたり使えない場合があるが、なるべく使わない

キーマッピング

 奥が深いので、おすすめのキーマッピングに乗ってしまうのがよさそう。

ctagsの利用

 どのファイルにどの関数定義が入っているのか把握するのが大変なので、ctagsコマンドと:tagコマンドの組み合わせで確認できるようになっている。
 これまたよくまとまったリンクがあるためそちらを利用。

ウィンドウ分割

 :splitでウィンドウが分割され、Ctrl+wを2回押すことでウィンドウ間を移動できる

制御コードを入力したい

 Ctrl+vに続けて、Ctlr+(制御コード対応アルファベット)。
 たとえば、Line Feed(LF)を入力したいときはCtrl+vに続けて、Ctlr+jとするとよい 

制御コードを表示させたい

 Vimであれば:set listコマンドで表示可能。制御文字を特定の文字で置き換えて表示したい場合は、:set listcharsコマンドで可能。

listcharsの例(改行を表示)
set listchars=eol:

トラブル対応

編集を保存できない場合

 なぜ保存できないのかを確認したうえで、編集内容を保持したい場合に利用。

  • :w! file …… 既存のファイルに上書きしたいとき
  • :w! newfile …… 新規ファイルに転記
  • :pre …… バッファを強制的にセーブ

便利なコマンド・オプション

便利な起動オプション(抜粋)

コマンド 効果
$ vi +n file n行目の位置でファイルオープン
$ vi + _file 最終行の位置でファイルオープン
$ vi +/pattern _file 最初にpatternが見つかった位置でファイルオープン
$ vi -R file 読み込み専用で開く。 $ view fileも同様。変更結果を保存したくなった場合は :w!で保存可能`
$ vi -r システムが保存してくれているファイル(バッファ)の一覧表示
$ vi -r file fileの編集バッファを指定して復旧

便利なコマンド(抜粋)

コマンド 効果
J 現在の行と次の行を連結する。3Jとすると3行分(現在の行、次の行、その次の行)を連結

gコマンドの面白い使い方

 ファイルの1・2行目をファイルの末尾に10回コピー

:1,10g/^/ 1,2t$

似たようなコマンドの違い

e!とq!の違い

 どちらも編集内容を帳消しにするが、以下の点が異なる。

コマンド 効果
:e! 編集内容を帳消しにして、最後に保存されたファイルを読み込み直す
:q 編集内容を帳消しにして、そのままviを終了させる

 vi hoge.txt などとして、しばらく編集した後「保存せずに」上記コマンドをそれぞれ実行すると違いが分かる

ddとDの違い

コマンド 効果
dd 行全体を削除する
D カーソル位置から行末(改行除く)を削除する

 行の途中でそれぞれのコマンドをタイプしてみると違いがよく分かる。

:s のgオプションの有無について

 以下文字列を:s/hoge/fuga/にて変更すると、次のようになる。

変換前
hoge hoge fuga fuga
変換後
fuga hoge fuga fuga

 :s/hoge/fuga/gとすると、次のようになる。

変換前
hoge hoge fuga fuga
変換後
fuga fuga fuga fuga
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1