1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
|
===============================================================================
= V I M 教 本 (チュートリアル) へ よ う こ そ - Version 1.7 =
===============================================================================
= 第 2 章 =
===============================================================================
Hic Sunt Dracones (危険な領域): もしこれがあなたにとって vim に初めて
触れる機会であり、入門の章を利用したいのであれば、どうか :q!<enter> を
タイプして終了し、第 1 章のために vimtutor を実行してください。
この章を完了するのに必要な時間は、覚えたコマンドを試すのにどれだけ時間を
使うのかにもよりますが、およそ 8-10 分です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.1.1: テキストオブジェクトの習得
** テキストオブジェクトを使って論理テキストブロックを正確に操作します **
1. 単語の操作を練習しましょう:
- カーソルを下の(---> と示された)行の何れかの単語の上に乗せましょう
- diw とタイプして単語を囲むスペースを含まずに消しましょう (INNER)
- daw とタイプして単語に続くスペースを合わせて消しましょう (A WORD)
- 他のオペレータも試しましょう: ciw (変更), yiw (ヤンク),
gqiw (フォーマット)
---> 練習用テキスト: "Vim's", (text_object), and 'powerful' words here.
2. 括弧で囲まれた内容を操作してみましょう:
- カーソルを下の(---> と示された)行の、いずれかの () {} [] <> のペアの
内側に合わせましょう
- di( または dib をタイプしましょう (ブラケットの内側が消えます)
- da( または dab をタイプしましょう (ブラケットごと消えます)
- クォートには i"/a" で、HTML/XMLのタグには it/at で同じことを試してみ
ましょう
---> テストケース: {curly}, [square], <angle>, and "quoted" items.
3. 段落と文を操作してみましょう:
- 段落の内側を消すには dip を使います (カーソルは段落のどこでもOK)
- 段落全体を選択するには vap を使います
- 文を消す das を試してみましょう
(ここで言う文とは .!? という区切り文字の間のことです)
4. 高度に組み合わせてみましょう:
- ciwnew<ESC> - 現在の単語を "new" に変更します
- ciw"<CTRL-R>-"<ESC> - 現在の単語をクォートで囲みます
- gUit - HTMLタグの内容を大文字に書き換えます
- va"p - クォートされたテキストを選択し、上書きペーストします
---> 最後の訓練: (Modify "this" text) by [applying {various} operations]<
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.1.2: 名前付きレジスタ
** ヤンク(コピー)した 2 つの単語を同時に保存し、それらをペーストします **
1. 以下の ---> と示された行にカーソルを移動しましょう。
2. 単語 'Edward' 内のどこかに移動し "ayiw とタイプしましょう。
覚え方: into register(") named (a) (y)ank (i)nner (w)ord
{訳: レジスタ(")へ (a)という名前の (y)ヤンク (i)内部 (w)単語}
3. 単語 'cookie' に進んで (fk や 3fc や $2b や /co<ENTER>)、 "byiw
とタイプしましょう。
4. 単語 'Vince' 内のどこかに移動し ciw<CTRL-R>a<ESC> とタイプしましょう。
覚え方: (c)hange (i)nner (w)ord with <contents of (r)egister> named (a)
{訳: (c)変更する (i)内部 (w)単語 <(r)レジスタの内容>で (a)という名前の}
5. 単語 'cake' 内のどこかに移動し ciw<CTRL-R>b<ESC> とタイプしましょう。
---> a) Edward will henceforth be in charge of the cookie rations
b) In this capacity, Vince will have sole cake discretionary powers
NOTE: レジスタへの削除も動作します。すなわち "sdiw はカーソル位置の単語を削除
し、レジスタ s に格納します。
REFERENCE: レジスタ :h registers
名前付きレジスタ :h quotea
カーソル移動 :h motion.txt<ENTER> /inner<ENTER>
CTRL-R :h insert<ENTER> /CTRL-R<ENTER>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.1.3: EXPRESSION レジスタ
** 計算の結果をその場で挿入します **
1. 以下の ---> と示された行にカーソルを移動しましょう。
2. 行内の数字のどこかにカーソルを移動しましょう。
3. 次のようにタイプしましょう。 ciw<CTRL-R>=60*60*24<ENTER>
4. 次の行で挿入モードに入り、次の操作で今日の日付を挿入しましょう。
<CTRL-R>=system('date')<ENTER>
NOTE: すべてのシステムへの呼び出しは OS 依存です。例えば Windows では
system('date /t') または :r!date /t を使います。
---> 1 日の正確な秒数を忘れてしまいました。 84600 でしょうか?
今日の日付は:
NOTE: 同じことは :pu=system('date') あるいは、より少ないキーストロークで
:r!date でも達成できます。
REFERENCE: Expression レジスタ :h quote=
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.1.4: 番号付きレジスタ
** yy と dd を押してレジスタに対する効果を目撃します **
1. 以下の ---> と示された行にカーソルを移動しましょう。
2. 0 番目の行をヤンクし、それから :reg<ENTER> でレジスタを検査しましょう。
3. "cdd で行 0 を削除し、それからレジスタを検査しましょう。
(行 0 はどこにあると思いますか?)
4. 残りの行もそれぞれ続けて削除して、都度 :reg で検査しましょう。
NOTE: 新しい行全体削除が追加されると、古い行全体削除はリストの下に移動すること
に気づいたでしょう。
5. 次に以下のレジスタを順にペースト(p)しましょう: c, 7, 4, 8, 2。例 "7p
---> 0. This
9. wobble
8. secret
7. is
6. on
5. axis
4. a
3. war
2. message
1. tribute
NOTE: 行全体削除(dd)は、行全体ヤンクや小さな移動による削除に比べると長い期間
番号付きレジスタに残ります。
REFERENCE: 番号付きレジスタ :h quote0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.1.5: 特殊レジスタ
** 高度な編集にはシステムクリップボードとブラックホールレジスタを使います **
Note: クリップボードを使用するには、Linux システムでは X11/Wayland ライブラリ
と、 "+clipboard" でビルドされた Vim (通常は Huge ビルド) が必要です。
":version" と "echo has('clipboard_working')" で確認してください。
1. クリップボードレジスタ + 及び * :
- "+y - システムクリップボードにヤンクします (例: "+yy は現在行)
- "+p - システムクリップボードからペーストします
- "* は X11 のプライマリセレクション(中クリック)で、 "+ はクリップボードで
す。
---> 試そう: "+yy し他のアプリケーションで Ctrl-V または Cmd+V でペーストしま
しょう
2. テキストを捨てるブラックホールレジスタ _ :
- "_daw - レジスタに保存せずに単語を消します
- デフォルトの " レジスタを上書きしたくない時に便利です
- これは前のレッスンで紹介した "a Word" テキストオブジェクトを使っているこ
とに注意してください
- "_dd - 保存せずに行を削除します
- "_dap - 保存せずに段落を削除します
- カウントと組み合わせることができます: 3"_dw
---> 練習: 何かの単語の上で "_diw でヤンク履歴に影響を与えずに消しましょう
3. ビジュアル選択と組み合わせることができます:
- V でテキストを選択してから "+y でヤンクします
- 挿入モードでクリップボードからペーストするには: <CTRL-R>+
- 他のアプリケーションを開いて、クリップボードからペーストしてみましょう
4. 覚えてください:
- クリップボードレジスタは異なるVimインスタンスを越えて働きます
- クリップボードレジスタは常に働くとは限りません
- ブラックホールレジスタは不意にレジスタを上書きすることを防ぎます
- デフォルトの " レジスタは通常のヤンク/ペーストに利用できます
- 名前付きレジスタ (a-z) は個々のVimセッション毎に独立して使えます
5. クリップボードのトラブルシューティング:
- :echo has('clipboard_working') で Vim がクリップボードをサポートしている
かを確認できます
- 1 は利用可能を、0 はコンパイルされていないことを意味しています
- Linuxでは vim-gtk や vim-x11 パッケージが必要になるかもしれません
(:version の出力をチェックしてみてください)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.1.6: マークの美しさ
** コードモンキーの算術の回避 **
NOTE: コーディングの際の共通の難問は大きなコードの塊を動かすことです。
以下の技術は、操作に関連付けられた行数の計算、例えば "a147d や
:945,1091d a や、さらに悪いことにまず i<CTRL-R>=1091-945<ENTER> を
使うようなことを避けることを助けます。
1. 以下の ---> と示された行にカーソルを移動しましょう。
2. 関数の最初の行に移動し ma でマークしましょう。
NOTE: 行内の正確な位置は重要ではありません!
3. 行の最後に移動しそれからコードブロックの末尾に移動しましょう。 $%
4. ブロックをレジスタ a に削除しましょう。 "ad'a
覚え方: into register(") named (a) put the (d)eletion from the cursor to the
LINE containing mark(') (a)
{訳: レジスタ(")へ格納 (a)という名前の (d)削除を カーソルからマーク(')(a)
を含む行まで}
5. ブロックを BBB と CCC の間にペーストしましょう。 "ap
NOTE: 慣れるまで何度もこの操作を練習しましょう。 ma$%"ad'a
---> AAA
function itGotRealBigRealFast() {
if ( somethingIsTrue ) {
doIt()
}
// 私たちの関数の分類法が変更され、現在の位置では
// アルファベットの意味がなくなりました
// 何百行ものコードを想像してください
// 素朴に、最初と最後に移動して、各行番号を記録または記憶する
// こともできます
}
BBB
CCC
NOTE: マークとレジスタは名前空間を共有しません。そのため、レジスタ a は完全に
マーク a とは独立しています。これはレジスタとマクロについては当てはまり
ません。
REFERENCE: マーク :h marks
マークによる移動 :h mark-motions (' と ` の違いについて)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.1 要約
1. テキストオブジェクトは精密な編集を提供します:
- iw/aw - inner/around word {訳: 単語の内側/周囲}
- i[/a[ - inner/around bracket {訳: 角カッコ内側/周囲}
- i"/a" - inner/around quotes {訳: クォートの内側/周囲}
- it/at - inner/around tag {訳: タグの内側/周囲}
- ip/ap - inner/around paragraph {訳: 段落の内側/周囲}
- is/as - inner/around sentence {訳: 文の内側/周囲}
2. テキストを格納 (ヤンク、削除) したり、取得 (ペースト) するレジスタが
全部で 26 個 (a-z) あります。
3. 単語全体をヤンクするには単語内のどこかで: yiw
4. 単語全体を変更するには単語内のどこかで: ciw
5. 挿入モードで直接レジスタからテキストを挿入するには: <CTRL-R>a
6. 単純な算術演算の結果を挿入するには: 挿入モードで <CTRL-R>=60*60<enter>
7. システムコールの結果を挿入するには: 挿入モードで <CTRL-R>=system('ls -1')
8. レジスタを検査するには :reg
9. 行全体削除の最終宛先を学びました。dd は番号付きレジスタへ、すなわち
レジスタ 1 - 9 に降順になります。行全体削除は他の操作より長く番号付き
レジスタに保持されることを理解しました
10. 番号付きレジスタにおけるすべてのヤンクの最終宛先と、それらはどれほど儚い
ものなのかを学びました
11. コマンドモードでマークを設定するには m[a-zA-Z0-9]
12. マークへ行単位で移動するには '
13. 特殊レジスタ:
- "+/"* - システムのクリップボード (OS依存)
- "_ - ブラックホール (消したりヤンクしたりしたテキストを捨てる)
- "= - 式レジスタ
- "- - 小さい削除レジスタ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これにて Vim のチュートリアルの第 2 章を終わります。これは作業中です。
この章は Paul D. Parker と Christian Brabandt によって書かれました。
日本語訳 vim-jpチーム <https://github.com/vim-jp/lang-ja>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|