第 1 章、vi テキストエディタ#
-
簡単な歴史的視点
-
ファイルの開閉
vi ファイル名
、編集ZZ
、ファイルを保存:w
、保存:w 新しいファイル名
、名前を付けて保存:w!
、強制書き込み:e!
、再開:q!
、強制終了:!rm ジャンクファイル
:!df
-
vi を学ぶ唯一の方法は練習することです。
第 2 章、簡単な編集#
-
カーソルの移動
- 単一の移動:
h
、j
、k
、l
、彼らは最悪です!私はneo キーボードレイアウトを持っています - 数値引数: 1、2、...
- 行内の移動:
0
、行の先頭に移動$
、行の末尾に移動^
、最初の非空文字に移動
- テキストブロックによる移動
w,b
、単語ごとに移動、前方、後方W,B
、大きな単語ごとに移動、前方、後方8G
、8 行目に移動G
、ファイルの終わりに移動gg
、1G
のように
- 前の / 次の行の最初の文字に移動:
-
、+
- 単一の移動:
-
簡単な編集
a
、追加;(必要ありません、私はこれらのキーを他の用途にカスタマイズします)i
、挿入;c
、変更;cw, cb
、単語を変更、前方、後方c2w
、2 単語を変更、前方c^
、最初の非空文字にc0, c$
、行の先頭、末尾に、またはc[Home]、c[End]
を使用
d
、削除;dw
、単語ごとにdb
、単語、後方dd
、行を削除d$、d[End]、D
、行の末尾まで削除dto
、dTx
、"x" まで(含まない)削除、前方 / 後方d/th
、最初の "th" の一致まで削除diw
、現在の単語を削除di(
、現在の括弧内を削除
s
、置換s
(1 文字以上)、S
(行全体)。
x、X
、1 文字を削除、前方、または後方(必要ありません)xP、XP
、削除して戻すxp、Xp
、2 文字を入れ替える
y
、ヤンク;p
、ペースト;$p
、行の末尾にペースト0P
、^P
、行の先頭にペースト
-
vi コマンドの一般的な形式
cc、dd、yy
(コマンド)(テキストオブジェクト)
(コマンド)(数)(テキストオブジェクト)
(数)(コマンド)(テキストオブジェクト)
cc
、行全体を変更C
、c$
のように~
、大文字小文字を変更
-
その他
- 最後のコマンドを繰り返す
.
- 元に戻す、やり直す
u
、C-r
、U
、evil-mode では異なる動作のようです
- 挿入コマンドの数値引数:例
4i<space><Esc>
- 最後のコマンドを繰り返す
-
注意
cc
、dd
、yy
、行に適用C
、D
、S
は現在の位置から末尾に適用され、Y
は行全体に適用C
===c$
、D
===d$
、しかしY
===yy
、y$
ではなく
-
全体
+------------------------------+------------------------------+------------------------------+------------------------------+ | テキストオブジェクト | 変更 | 削除 | コピー | +------------------------------+------------------------------+------------------------------+------------------------------+ | 1単語 | cw | dw | yw | +------------------------------+------------------------------+------------------------------+------------------------------+ | 2単語、カウントしない | 2cWまたはc2W | 2dWまたはd2W | 2yWまたはy2W | | 句読点 | | | | +------------------------------+------------------------------+------------------------------+------------------------------+ | 3単語後方 | 3cbまたはc3b | 3dbまたはd3b | 3ybまたはy3b | +------------------------------+------------------------------+------------------------------+------------------------------+ | 1行 | cc | dd | yyまたはY | +------------------------------+------------------------------+------------------------------+------------------------------+ | 行の末尾まで | c$またはC | d$またはD | y$ | +------------------------------+------------------------------+------------------------------+------------------------------+ | 行の先頭まで | c0 | d0 | y0 | +------------------------------+------------------------------+------------------------------+------------------------------+ | 単一文字 | r | xまたはX | ylまたはyh | +------------------------------+------------------------------+------------------------------+------------------------------+ | 5文字 | 5s | 5x | 5yl | +------------------------------+------------------------------+------------------------------+------------------------------+
-
例
r
、dd
、P
、cw
、x
エディタを使うとページをスクロールでき、カーソルを移動し、行を削除し、文字を挿入し、編集結果を作成しながら見ることができます。 スクリーンエディタは非常に人気があります。
P
、p
、.
スクリーンエディタを使うとページをスクロールできます。 カーソルを移動できます。 行を削除できます。
J
スクリーンエディタを使うとページをスクロールでき、カーソルを移動できます。
第 3 章、急いで移動する#
-
スクリーンによる移動
- スクリーンのスクロール:
C-b
、C-f
、C-u
(emacs evil-mode では動作しません)、C-d
、C-y
、C-e
z<Enter>
、z.
、z-
、上部 / 中央 / 下部に移動し、そこにスクロールします(emacs のrecenter-top-center
ほど良くはありません、私はこれを evil-mode で削除します)
- スクリーンのスクロール:
-
スクリーンの再描画:
C-l
(私の evil-mode では動作しません、recenter-top-center
があります) -
スクリーン内の移動
H
、M
、L
: スクリーンの上部 / 中央 / 下部に2H
、2L
: 上部 / 下部から 2 行目
-
行による移動
+
、<Enter>
、-
、次の / 前の行の最初の文字に移動します。- 現在の行での移動:
20|
、20 列目に移動、^
、最初の非空文字に移動。
-
テキストブロックによる移動
e
、E
、単語の末尾(句読点を無視)(
、)
、現在の / 次の文の先頭{
、}
、現在の / 次の段落の先頭[[
、]]
、現在の / 次のセクションの先頭
-
検索による移動
/パターン
、?パターン
、前方 / 後方に検索n
、次の一致N
、次の一致、反対の位置:set nowrapscan
、ループ検索を行わないd/パターン
-
現在の行の検索
fx
、Fx
、前の / 次の 'x' に移動tx
、Tx
、'x' の前の文字に移動、前の / 次の;
、,
、同じ方向、反対方向を繰り返す7fx
、7 番目の一致に移動dfx
、例dfi
、ここから最初の 'i' の出現まで削除し、次にd;
、2 番目の 'i' の出現まで削除
-
行番号による移動
20G
、20 行目に移動``
, 戻る(古い位置)''
、戻るが行の先頭に
スクリーンエディタを使うとページをスクロールでき、カーソルを移動し、行を削除し、文字を挿入し、さらに、編集結果を作成しながら見ることができます。
第 4 章、基本を超えて#
-
さらなるコマンドの組み合わせ
+------------+------------+-----------+------------------------------+ |変更 |削除 |コピー |カーソルから... | +------------+------------+-----------+------------------------------+ |cH |dH |yH |スクリーンの上部 | +------------+------------+-----------+------------------------------+ |cL |dL |yL |スクリーンの下部 | +------------+------------+-----------+------------------------------+ |c+ |d+ |y+ |次の行 | +------------+------------+-----------+------------------------------+ |c5| |d5| |y5| |現在の行の5列目 | +------------+------------+-----------+------------------------------+ |2c) |2d) |2y) |次の文の2番目 | +------------+------------+-----------+------------------------------+ |c{ |d{ |y{ |前の段落 | +------------+------------+-----------+------------------------------+ |c/パターン |d/パターン |y/パターン |パターン | +------------+------------+-----------+------------------------------+ |cn |dn |yn |次のパターン | +------------+------------+-----------+------------------------------+ |cG |dG |yG |ファイルの終わり | +------------+------------+-----------+------------------------------+ |c13G |d13G |y13G |13行目 | +------------+------------+-----------+------------------------------+
-
vi を起動する際のオプション
vi +3 ファイル名
、3 行目でファイルを開くvi + ファイル名
、最後の行でファイルを開くvi +/パターン ファイル名
、パターンの最初の出現でファイルを開くvi +R ファイル名
、読み取り専用モードでファイルを読み込むvi -r ファイル名
、ex -r ファイル名
、バッファを回復
-
名前付きバッファへのヤンク
"dyy"
、バッファ "d" にヤンク"ayw"
、バッファ "a" にヤンク"ap
、"
dp`、バッファ"a"/"d" をペースト
-
自分の位置をマークする
mx
、現在の位置を x にマーク'x
、''
、``
, 最後の位置に移動
第 5 章、ex エディタの紹介#
__ _ _ _ _
/ _| ___ _ __ | | __ _| |_ ___ _ __ _ __ ___ __ _ __| (_)_ __ __ _
| |_ / _ \| '__| | |/ _` | __/ _ \ '__| | '__/ _ \/ _` |/ _` | | '_ \ / _` |
| _| (_) | | | | (_| | || __/ | | | | __/ (_| | (_| | | | | | (_| |
|_| \___/|_| |_|\__,_|\__\___|_| |_| \___|\__,_|\__,_|_|_| |_|\__, |
|___/
第 6 章、グローバル置換#
-
置換
:s/古い/新しい
、古いものの最初の出現を置換:s/古い/新しい/g
、多くの出現:50,100s/古い/新しい/g
、:50,100s/古い/新しい
50〜100 行に適用:1,$s/古い/新しい
、ファイル全体に適用
-
c、確認
y
ははいn
はいいえEnter
、終了
-
コンテンツに敏感な置換
:%s/古い/新しい/g
、確認なし、ファイル全体:g/パターン/s/古い/新しい/g
、:1,200g/パターン/s/古い/新しい/g
:g/パターン/s/古い/新しい/g
、:g/パターン/s//新しい/g
と同じ
-
パターンマッチングルール
.
、単一文字、改行を除く*
、前の文字の 0 回以上の出現に一致- 例
a*
はa
、aa
、aaa
などに一致 - 例
.*
は任意の文字の組み合わせに一致
- 例
^、$
、正規表現の最初 / 最後の文字である場合、行の始まり / 終わりとして扱われ、それ以外はそのまま扱われる。- 例
^Line
は "Line" で始まる任意の行に一致 - 例
something^*
は "something"、"something^"、"something^^" などに一致
- 例
[]
、例[aoei]
はa
、o
、e
、i
に一致;[a-z]
、;:[a-z0-9]
は期待通りに動作します。:%s/\(That\) or \(this\)/\2 or \1/
~
、最後の検索履歴に一致。例えば、/the
で "the" を検索した後、/~n
で "then" を検索できます。\
、例\.
は "."\<m
、\>tion
、'm' で始まり、"tion" で終わる単語に一致
-
POSIX ブラケット式
[:alnum:]
英数字[:alpha:]
アルファベット文字[:blank:]
スペースとタブ文字[:cntrl:]
制御文字[:digit:]
数字[:graph:]
印刷可能で可視(空白以外)の文字[:lower:]
小文字[:print:]
印刷可能な文字(空白を含む)[:punct:]
句読点[:space:]
空白文字[:upper:]
大文字[:xdigit:]
16 進数の数字
-
s/古い/新しい/g
の新しいパターン\n
、n は 1..9、(THIS) に一致&
、一致した部分~
、s/thier/their/
、次にs/her/~/
はs/her/their
のようになります。\u、\l
、大文字 / 小文字の文字。:s/\(That\) or \(this\)/\u\2 or \l\1/
\U、\L、\e、\E
、大文字の領域、または全体の一致:set ic
、大文字小文字を無視
-
さらなる置換のトリック
:s//~/
、最後の置換を繰り返す:%&g
、最後の置換をすべての場所で繰り返す:%s;/user1/tim;/home/tim;g
-
演習
/four
、<Enter>
、cwfive
、n
(検索を繰り返す)、n
(1 つの一致をバイパス)、.
(最後のcwfive
を適用)
-
例
- 例 - 1
<p>何か</p> <p>何か他のもの</p> <a>何か</a> ===> `:%300,400g/<p>/s/何か/何か他のもの/g` ===> <a>何か</a> <a>何か</a> <a>何か</a> <p>何か</p> <p>何か他のもの</p>
- 例 - 2
一 (一) 二 (二) 三 ===> `:348,352s/.*/(&)/` ===> (三) 四 (四) 五 (五)
- 例 - 3
That or this ===> `:%s/\(That\) or \(this\)/\2 or \1/` ===> this or That
__ _ _ _ _
/ _| ___ _ __ | | __ _| |_ ___ _ __ _ __ ___ __ _ __| (_)_ __ __ _
| |_ / _ \| '__| | |/ _` | __/ _ \ '__| | '__/ _ \/ _` |/ _` | | '_ \ / _` |
| _| (_) | | | | (_| | || __/ | | | | __/ (_| | (_| | | | | | (_| |
|_| \___/|_| |_|\__,_|\__\___|_| |_| \___|\__,_|\__,_|_|_| |_|\__, |
|___/
第 7 章、高度な編集#
-
vi のカスタマイズ
- コマンド
:set オプション
、または:set noオプション
- .exrc ファイル
- コマンド
-
Unix コマンドの実行
:!cmd
:r !date
、ファイルに出力、Thu May 1 12:59:55 CST 2014:. !date
、r
と同じですが、現在の行を上書き:r Learning-Vim.md
、これは.... 良いです。
-
コマンドを通じてテキストをフィルタリング
:%!sort
、試してみてください、死にます...!)cmd
、これらの文を cmd に渡す!!
、現在の行!2!
、2!!
、2 行
-
コマンドの保存
- 単語の省略
:ab abbr フレーズ
:unab abbr
- 単語の省略
第 8 章、vi クローンの紹介#
トリック#
diw
、di"
、di{}
:!xxd
、16 進数エディタ
:!xxd -r
de
、その後.
を希望通りにddp
、現在の行と次の行を入れ替えるbye
、yiw
'.
、最後に編集した行`.
, 最後に編集した文字:changes
、変更をリスト- /rgba/y A
10.gv
、最後の視覚選択を再選択 g~~
、gUU
、guu
>>
、<<
、インデント#
、*
、カーソルの下の単語を検索