From e8f9a72df16f7d6b605f772edca38e4468fc0954 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Sat, 21 Dec 2024 13:37:12 +0900 Subject: [PATCH] Translate tutor2 --- runtime/tutor/.gitignore | 4 +- runtime/tutor/Makefile | 18 +++- runtime/tutor/tutor2 | 197 ++++++++++++++++++++++++++++++++++ runtime/tutor/tutor2.ja.utf-8 | 197 ++++++++++++++++++++++++++++++++++ 4 files changed, 411 insertions(+), 5 deletions(-) create mode 100644 runtime/tutor/tutor2 create mode 100644 runtime/tutor/tutor2.ja.utf-8 diff --git a/runtime/tutor/.gitignore b/runtime/tutor/.gitignore index d254640..e390432 100644 --- a/runtime/tutor/.gitignore +++ b/runtime/tutor/.gitignore @@ -1,2 +1,2 @@ -/tutor.ja.sjis -/tutor.ja.euc +/tutor?.ja.sjis +/tutor?.ja.euc diff --git a/runtime/tutor/Makefile b/runtime/tutor/Makefile index 68b6963..8976f4f 100644 --- a/runtime/tutor/Makefile +++ b/runtime/tutor/Makefile @@ -1,20 +1,32 @@ MASTER_TUTOR1 = tutor1.ja.utf-8 +MASTER_TUTOR2 = tutor2.ja.utf-8 +MASTER_ALL = $(MASTER_TUTOR1) $(MASTER_TUTOR2) test: update -update: tutor1.ja.sjis tutor1.ja.euc +update: tutor1.ja.sjis tutor1.ja.euc \ + tutor2.ja.sjis tutor2.ja.euc +# tutor1 tutor1.ja.sjis: $(MASTER_TUTOR1) iconv -f utf-8 -t cp932 < $< > $@ tutor1.ja.euc: $(MASTER_TUTOR1) iconv -f utf-8 -t euc-jp < $< > $@ +# tutor2 +tutor2.ja.sjis: $(MASTER_TUTOR2) + iconv -f utf-8 -t cp932 < $< > $@ + +tutor2.ja.euc: $(MASTER_TUTOR2) + iconv -f utf-8 -t euc-jp < $< > $@ + force: touch @$(MAKE) update -touch: $(MASTER_TUTOR1) - touch $< +touch: $(MASTER_ALL) + touch $(MASTER_ALL) clean: rm -f tutor1.ja.sjis tutor1.ja.euc + rm -f tutor2.ja.sjis tutor2.ja.euc diff --git a/runtime/tutor/tutor2 b/runtime/tutor/tutor2 new file mode 100644 index 0000000..f41b701 --- /dev/null +++ b/runtime/tutor/tutor2 @@ -0,0 +1,197 @@ +=============================================================================== += W e l c o m e t o t h e V I M T u t o r - Version 1.7 = +=============================================================================== += C H A P T E R TWO = +=============================================================================== + + Hic Sunt Dracones: if this is your first exposure to vim and you + intended to avail yourself of the introductory chapter, kindly type + :q and try again. + + The approximate time required to complete this chapter is 8-10 minutes, + depending upon how much time is spent with experimentation. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lesson 2.1.1: THE NAMED REGISTERS + + + ** Store two yanked words concurrently and then paste them ** + + 1. Move the cursor to the line below marked ---> + + 2. Navigate to any point on the word 'Edward' and type "ayiw + +MNEMONIC: into register(") named (a) (y)ank (i)nner (w)ord + + 3. Navigate forward to the word 'cookie' (fk or 2fc or $2b or /co) + and type "byiw + + 4. Navigate to any point on the word 'Vince' and type ciwa + +MNEMONIC: (c)hange (i)nner (w)ord with named (a) + + 5. Navigate to any point on the word 'cake' and type ciwb + +---> a) Edward will henceforth be in charge of the cookie rations + b) In this capacity, Vince will have sole cake discretionary powers + +NOTE: Delete also works into registers, i.e. "sdiw will delete the word under + the cursor into register s. + +REFERENCE: Registers :h registers + Named Registers :h quotea + Motion :h motion.txt /inner + CTRL-R :h insert /CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lesson 2.1.2: THE EXPRESSION REGISTER + + + ** Insert the results of calculations on the fly ** + + 1. Move the cursor to the line below marked ---> + + 2. Navigate to any point on the supplied number + + 3. Type ciw=60*60*24 + + 4. On the next line, enter insert mode and add today's date with + =system('date') + +NOTE: All calls to system are OS dependent, e.g. on Windows use + system('date /t') or :r!date /t + +---> I have forgotten the exact number of seconds in a day, is it 84600? + Today's date is: + +NOTE: the same can be achieved with :pu=system('date') + or, with fewer keystrokes :r!date + +REFERENCE: Expression Register :h quote= + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lesson 2.1.3: THE NUMBERED REGISTERS + + + ** Press yy and dd to witness their effect on the registers ** + + 1. Move the cursor to the line below marked ---> + + 2. yank the zeroth line, then inspect registers with :reg + + 3. delete line 0. with "cdd, then inspect registers + (Where do you expect line 0 to be?) + + 4. continue deleting each successive line, inspecting :reg as you go + +NOTE: You should notice that old full-line deletions move down the list + as new full-line deletions are added + + 5. Now (p)aste the following registers in order; c, 7, 4, 8, 2. i.e. "7p + +---> 0. This + 9. wobble + 8. secret + 7. is + 6. on + 5. axis + 4. a + 3. war + 2. message + 1. tribute + +NOTE: Whole line deletions (dd) are much longer lived in the numbered registers + than whole line yanks, or deletions involving smaller movements + +REFERENCE: Numbered Registers :h quote0 + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lesson 2.1.4: THE BEAUTY OF MARKS + + + ** Code monkey arithmetic avoidance ** + +NOTE: a common conundrum when coding is moving around large chunks of code. + The following technique helps avoid number line calculations associated + with operations like "a147d or :945,1091d a or even worse using + i=1091-945 first + + 1. Move the cursor to the line below marked ---> + + 2. Go to the first line of the function and mark it with ma + +NOTE: exact position on line is NOT important! + + 3. Navigate to the end of the line and then the end of the code block + with $% + + 4. Delete the block into register a with "ad'a + +MNEMONIC: into register(") named (a) put the (d)eletion from the cursor to the + LINE containing mark(') (a) + + 5. Paste the block between BBB and CCC "ap + +NOTE: practice this operation multiple times to become fluent ma$%"ad'a + +---> AAA + function itGotRealBigRealFast() { + if ( somethingIsTrue ) { + doIt() + } + // the taxonomy of our function has changed and it + // no longer makes alphabetical sense in its current position + + // imagine hundreds of lines of code + + // naively you could navigate to the start and end and record or + // remember each line number + } + BBB + CCC + +NOTE: marks and registers do not share a namespace, therefore register a is + completely independent of mark a. This is not true of registers and + macros. + +REFERENCE: Marks :h marks + Mark Motions :h mark-motions (difference between ' and `) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lesson 2.1 SUMMARY + + + 1. To store (yank, delete) text into, and retrieve (paste) from, a total of + 26 registers (a-z) + 2. Yank a whole word from anywhere within a word: yiw + 3. Change a whole word from anywhere within a word: ciw + 4. Insert text directly from registers in insert mode: (C-r)a + + 5. Insert the results of simple arithmetic operations: (C-r)=60*60 + in insert mode + 6. Insert the results of system calls: (C-r)=system('ls -1') + in insert mode + + 7. Inspect registers with :reg + 8. Learn the final destination of whole line deletions: dd in the numbered + registers, i.e. descending from register 1 - 9. Appreciate that whole + line deletions are preserved in the numbered registers longer than any + other operation + 9. Learn the final destination of all yanks in the numbered registers and + how ephemeral they are + + 10. Place marks from command mode m[a-zA-Z0-9] + 11. Move line-wise to a mark with ' + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + This concludes chapter two of the Vim Tutor. It is a work in progress. + + This chapter was written by Paul D. Parker. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/runtime/tutor/tutor2.ja.utf-8 b/runtime/tutor/tutor2.ja.utf-8 new file mode 100644 index 0000000..5e0523b --- /dev/null +++ b/runtime/tutor/tutor2.ja.utf-8 @@ -0,0 +1,197 @@ +=============================================================================== += V I M 教 本 (チュートリアル) へ よ う こ そ - Version 1.7 = +=============================================================================== += 第 2 章 = +=============================================================================== + + Hic Sunt Dracones (危険な領域): もしこれがあなたにとって vim に初めて + 触れる機会であり、入門の章を利用したいのであれば、どうか :q を + タイプして再挑戦してください。 + + この章を完了するのに必要な時間は、覚えたコマンドを試すのにどれだけ時間を + 使うのかにもよりますが、およそ 8-10 分です。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lesson 2.1.1: 名前付きレジスタ + + + ** ヤンク(コピー)した 2 つの単語を同時に保存し、それらをペーストします ** + + 1. 以下の ---> と示された行にカーソルを移動しましょう。 + + 2. 単語 'Edward' 内のどこかに移動し "ayiw とタイプしましょう。 + +覚え方: into register(") named (a) (y)ank (i)nner (w)ord + {訳: レジスタ(")へ (a)という名前の (y)ヤンク (i)内部 (w)単語} + + 3. 単語 'cookie' に進んで (fk や 2fc や $2b や /co)、 "byiw + とタイプしましょう。 + + 4. 単語 'Vince' 内のどこかに移動し ciwa とタイプしましょう。 + +覚え方: (c)hange (i)nner (w)ord with named (a) + {訳: (c)変更する (i)内部 (w)単語 <(r)レジスタの内容>で (a)という名前の} + + 5. 単語 'cake' 内のどこかに移動し ciwb とタイプしましょう。 + +---> 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 /inner + CTRL-R :h insert /CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lesson 2.1.2: EXPRESSION レジスタ + + + ** 計算の結果をその場で挿入します ** + + 1. 以下の ---> と示された行にカーソルを移動しましょう。 + + 2. 行内の数字のどこかにカーソルを移動しましょう。 + + 3. 次のようにタイプしましょう。 ciw=60*60*24 + + 4. 次の行で挿入モードに入り、次の操作で今日の日付を挿入しましょう。 + =system('date') + +NOTE: すべてのシステムへの呼び出しは OS 依存です。例えば Windows では + system('date /t') または :r!date /t を使います。 + +---> 1 日の正確な秒数を忘れてしまいました。 84600 でしょうか? + 今日の日付は: + +NOTE: 同じことは :pu=system('date') あるいは、より少ないキーストロークで + :r!date でも達成できます。 + +REFERENCE: Expression レジスタ :h quote= + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lesson 2.1.3: 番号付きレジスタ + + + ** yy と dd を押してレジスタに対する効果を目撃します ** + + 1. 以下の ---> と示された行にカーソルを移動しましょう。 + + 2. 0 番目の行をヤンクし、それから :reg でレジスタを検査しましょう。 + + 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.4: マークの美しさ + + + ** コードモンキーの算術の回避 ** + +NOTE: コーディングの際の共通の難問は大きなコードの塊を動かすことです。 + 以下の技術は、操作に関連付けられた行数の計算、例えば "a147d や + :945,1091d a や、さらに悪いことにまず i=1091-945 を + 使うようなことを避けることを助けます。 + + 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. テキストを格納 (ヤンク、削除) したり、取得 (ペースト) するレジスタが + 全部で 26 個 (a-z) あります。 + 2. 単語全体をヤンクするには単語内のどこかで: yiw + 3. 単語全体を変更するには単語内のどこかで: ciw + 4. 挿入モードで直接レジスタからテキストを挿入するには: (C-r)a + + 5. 単純な算術演算の結果を挿入するには: 挿入モードで (C-r)=60*60 + 6. システムコールの結果を挿入するには: 挿入モードで (C-r)=system('ls -1') + + 7. レジスタを検査するには :reg + 8. 行全体削除の最終宛先を学びました。dd は番号付きレジスタへ、すなわち + レジスタ 1 - 9 に降順になります。行全体削除は他の操作より長く番号付き + レジスタに保持されることを理解しました + 9. 番号付きレジスタにおけるすべてのヤンクの最終宛先と、それらはどれほど儚い + ものなのかを学びました + + 10. コマンドモードでマークを設定するには m[a-zA-Z0-9] + 11. マークへ行単位で移動するには ' + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + これにて Vim のチュートリアルの第 2 章を終わります。これは作業中です。 + + この章は Paul D. Parker によって書かれました。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~