サーバ構築/基礎/vi操作


◆vi/vim

  • コマンド
viの主要コマンド形態は5種類ある。
 ・動作モード
 ・移動系
 ・編集系
 ・検索置換系
 ・設定系


2017年現在、LinuxOS同梱のviはvimに置き換わっている。vi -vでバージョンとvimであることが確認できる。

  • 動作モード(見辛さの都合でコロン:とピリオド.を全角にしている。実際は半角:コロン、半角.ピリオドを使用。以下、同じ。)
NORM ノーマル へ戻る esc
NORM ノーマル へ戻る Ctrl-[
VISUAL ビジュアル へ入る v
VISUAL ビジュアル 矩形選択 Ctrl-v
VISUAL ビジュアル 矩形削除 d
INS インサート 現位置 i
INS インサート 右位置 a
COMD コマンドライン へ戻る
COMD 画面 横分割 :sp [file.name]
COMD 画面 横分割 :vs [file.name]
COMD 画面 次画面移動 Ctrl+w w
COMD 画面 次画面移動 Ctrl+w p
COMD 画面 閉じる Ctrl-w o
COMD 画面 他閉じる :only
COMD 画面 移動 Ctrl+w hjkl
COMD 画面 位置変更 Ctrl+w HJKL
※注意
 ・矩形モード(VISUAL MODE)後の操作はコンソールによって挙動が異なる
 ・画面の縦分割はコンソールによって出来ないものもある
 ・コンソールによっては誤操作でコンソールを落としてしまう可能性がある

  • 移動系
前画面 1行目 - gg                 Ctrl-b
2行目 {段
現在
画面域
3行目 H (文
4行目 k Ctrl-u
5行目 O/^ b/B h ◆現在地 l w/W $
6行目 M j
7行目 括%
8行目 )文 Ctrl-d
9行目 L
次画面 10行目 }段
11行目 G Ctrl-f


  • 編集系
モード
COMD 挿入 行頭 I
COMD 挿入 行末 A
COMD 挿入 次行 o
COMD 挿入 前行 O
COMD 挿入 後半削除 C
COMD 置換 現文字 r
COMD 置換 複数 R
COMD 置換 改行SP置換 J
COMD 置換 現大小 チルダ
COMD 削除 1文字 x
COMD 削除 1行 dd
COMD 削除 1単語 dw
COMD 削除 特定1単語 diw
COMD 削除 次語まで dt*
COMD 削除 現地か行末 D
COMD アンドゥ - u
COMD リドゥ - Ctrl-r
COMD リドゥ 直前操作
COMD インデント 追加 >>
COMD インデント 削除 <<


  • 検索置換
 ・正規表現は検索、置換ともに利用できる。(:set magic?でmagicモード可否が確認できる)
COMD 検索 後方 /
COMD 検索 前方 ?
COMD 検索 現単語後方 g*
COMD 検索 現単語前方 g#
COMD 検索 次候補 n
COMD 検索 前候補 N
COMD 検索モード :very magic \v
COMD 検索モード :very nomagic \V
COMD 置換 現単語
COMD 置換 全体 %s/before/after/g
COMD 置換 現在行 s/before/after/g
COMD 置換 指定行 10,20s/before/after/g

  • 設定系
COMD ar ar(gs)、パターンを保存できる
COMD args ar(gs)、パターンを保存できる
COMD autoindent 改行時に前の行のインデントを継続する
COMD autoread 開いているがvim上で変更のないファイルについて、外部で変更があった時に自動的に読み込み直すか?
COMD b 数値 バッファに直接移動
COMD backspace <BS>キーの影響範囲を指定。詳細はヘルプを参照。
COMD backup ファイルの保存時に、保存前のファイルをバックアップするか?
COMD cindent C言語スタイルのインデント機能が有効
COMD clipboard OSのクリップボードをどのレジスタと関連付けるか。
COMD cmdheight 画面最下部(ステータス行より下)のメッセージ表示欄の行数。これを超える行数のメッセージがある場合は"-- 継続 --"のプロンプトが表示される。
COMD cn エラーの発生した場所まで移動
COMD confirm 保存されていないファイルがあるときに、vim を終了させようとした時に保存の確認を行うか?
COMD ctags *.c 指定したファイルの全てのタグの一覧表ファイルを生成
COMD cursorcolumn カーソル位置の縦一桁(カラム)の背景色を変える
COMD cursorline カーソル行の背景色を変える
COMD cwin vimgrepの検索結果の一覧が表示
COMD cwindow
COMD e ++enc=文字コード 表示を指定の文字コードに変更
COMD errorbells エラーメッセージの表示時にビープ音を鳴らす。(メッセージを伴わないエラーにはこの項目は適用されない。)
COMD expandtab タブ入力を複数の空白入力に置き換える (既存のタブには影響しない)
COMD fileencoding=文字コード ファイルエンコードを指定して保存しなおす
COMD gdefault 置換の時、gを指定しなくても同一行で複数回置換が行われる。
COMD grep
COMD gvim -t a_function 定義のある位置からカーソルが始める
COMD helpheight ヘルプ画面の行数
COMD hidden 編集中で保存されていないファイルがあるときに他のファイルを開けるか?
COMD history コマンドラインモードで保存する履歴件数。履歴上のコマンドはCTRL-P/CTRL-N で再び表示することが出来ます。
COMD hlsearch 検索文字列をハイライトするか?
COMD ignorecase 検索で大文字と小文字を区別しない。
COMD ignorecase と両立する。 オン/オフ
COMD incsearch エンターキーで確定する前から、文字が入力されるたびに検索を行うか?
COMD laststatus 画面最下部のステータス行を0:全く表示しない 1:ウィンドウが2つ以上あるときだけ表示 2:常に表示
COMD list 不可視文字の表示
COMD listchars 不可視文字を表示する場合、表示に使われる文字
COMD ls 編集中のバッファ一覧を表示
COMD magic メタ文字として扱う文字を`magic`で指定(`.`,`*`,`$`,`^`,`[`などを`\`で前置なしでメタ文字として扱う)
COMD make makeコマンドを実行し、その実行結果を取得
COMD mouse マウスによるクリックやドラッグに対してどう反応するか。
COMD noignorecase 大文字と小文字を無視しない
COMD nomagic メタ文字として扱う文字を`nomagic`で指定(`$`,`^`などを`\ `で前置なしでメタ文字として扱う)
COMD nosmartcase ignorecase'を上書きしない
COMD number 行番号表示
COMD ruler 画面右下のカーソル位置表示
COMD scrolloff ウィンドウの上端、下端にカーソルが移動した時に、
COMD scrolloff 画面の左右の端でカーソル先の視界を何行確保するか。
COMD ''se nu'' 行番号を表示
COMD set enc? 文字コードを確認
COMD set fenc? ファイルエンコードを確認
COMD set fenc=euc-jp ファイルエンコードを指定して保存しなおす
COMD shellslash Windows 環境でフォルダの区切り文字をバックスラッシュ(\)の代わりにスラッシュ(/)にする。(Mac OS X / Linux では常にスラッシュ(/)でこのオプションは影響しない。)
COMD shiftwidth 自動インデントでずれる幅
COMD showmatch カーソル位置に括弧があった場合、対応する括弧を強調表示する
COMD sidescroll 画面の左右の端でスクロールが発生した場合、何文字ずつスクロールするか。
COMD sidescrolloff 画面の左右の端で
COMD sidescrolloff ウィンドウの上端、下端にカーソルが移動した時に、カーソル先の視界を何桁確保するか。
COMD smartcase 検索文字列に大文字と小文字が混在した場合に限り、大文字と小文字を区別して検索。
COMD smartindent 改行時に入力された行の末尾に合わせて次の行のインデントを増減する
COMD softtabstop 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
COMD swapfile 編集中のファイルをスワップファイルとして保存するか?
COMD t_vb ビジュアルベルの表示内容。空文字列なら何もしない。
COMD tablast タブ 末尾画面移動
COMD tabnew タブ機能(vim7.3以上)
COMD tabnext タブ 次画面移動
COMD tabstop 画面上でタブ文字が占める幅
COMD vimgrep (words) [file] file先を検索。現ファイルを検索する場合はfile名に%を使う
COMD visualbell ビープ音をすべて視覚表示(ビジュアルベル)に置き換える。
COMD whichwrap 行頭/行末で左/右に移動した時に行をまたぐ移動が出来るかどうか。詳細はヘルプを参照。
COMD wildmenu コマンドラインモードで<Tab>キーによるファイル名補完を有効にする
COMD wildmode コマンドラインモードでのファイル名補完の挙動を指定します。詳細はヘルプを参照。
COMD wrapscan 最後尾の検索候補にたどり着いたら、次に先頭に戻る。


  • その他
 エスケープ文字
\
.
*
+
?
=
{
^
$
(
)
[
&
@
/


テキストエディタ―の人気あるものだ、VSCodeやSublimeText、Emaxなど。
IDEでは、Eclipse/日本語化版のPleiades、VisualStudioなどがある。
だがこれらは元々OSに同梱されているわけではない。
OSに同梱されているのは、Linux系OSならvi/vim。
Windowsならコマンドプロンプト/PowerShell。MacOSならテキストエディタとターミナル。
好き嫌いに関わらずインフラ系は当然、アプリ開発系でもサーバに触れる
機会がある者は好まざるとも使わざるを得ないシーンが非常に多い。
vi/vimでの操作を迅速に行えるようにするために、1つでも多くのコマンドを覚えておく必要がある。

好まざるともと言ったのは、サーバ管理を担当するとなるとシェルのバッチ、crontabや各種コンフィグファイルも
vi/vimを使って書くことが多いからだ。
余談だがvimの作者が今ならこんなコマンド体系にはしなかったと悔やんでいた記事があった。

vimはLinuxのminimal版でさえ必ず入っているツールなので使いこなせられるレベル
までになれれば相当作業が早くなる。
ノーマル/コマンドモードとインサート(編集)モードを行き来することが非常に
多いので、編集モードからコマンドモードに戻る際はEscキーではなく、Ctrl+[を
使うようにすると少しは楽になる。
最終更新:2017年10月29日 04:57