fix(tutor): remove hyperlinks, simplify non-interactive examples #36307

1. Every hyperlink-like element was replaced by `"$1"` (where $1 is the original string showed in the hyperlink);
2. Arrows `--->` were used in lines containing practice examples when no editing text is involved;
3. Context on interactivity was minimally adapted when strictly needed, not to disrupt the original tutor's intent;
4. Tests regarding the tutor file refactored to ensure the new syntax is not flagged as an error.
This commit is contained in:
Eduardo Cruz Guedes
2025-10-27 14:24:00 -03:00
committed by GitHub
parent b9451dfd4c
commit 5e039c8e97
14 changed files with 891 additions and 925 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,6 @@
"150": "There is also some text missing here.", "150": "There is also some text missing here.",
"218": "There are some words that don't belong in this sentence.", "218": "There are some words that don't belong in this sentence.",
"234": "Somebody typed the end of this line twice.", "234": "Somebody typed the end of this line twice.",
"273": -1,
"292": "This line of words is cleaned up.", "292": "This line of words is cleaned up.",
"309": "1) Roses are red,", "309": "1) Roses are red,",
"310": "", "310": "",
@@ -25,11 +24,7 @@
"422": "This line has a few words that need changing using the change operator.", "422": "This line has a few words that need changing using the change operator.",
"442": "The end of this line needs to be corrected using the c$ command.", "442": "The end of this line needs to be corrected using the c$ command.",
"443": "The end of this line needs to be corrected using the c$ command.", "443": "The end of this line needs to be corrected using the c$ command.",
"506": -1,
"525": -1,
"548": "Usually the best time to see the flowers is in the spring.", "548": "Usually the best time to see the flowers is in the spring.",
"743": -1,
"748": -1,
"764": "This line will allow you to practice appending text to a line.", "764": "This line will allow you to practice appending text to a line.",
"765": "This line will allow you to practice appending text to a line.", "765": "This line will allow you to practice appending text to a line.",
"785": "Adding 123 to 456 gives you 579.", "785": "Adding 123 to 456 gives you 579.",

View File

@@ -8,7 +8,7 @@
~~~ cmd ~~~ cmd
:Tutor vim-01-beginner :Tutor vim-01-beginner
~~~ ~~~
Or just open the [first chapter](@tutor:vim-01-beginner) of the tutor at the link. Or just open the first chapter of the tutor at the link.
The approximate time required to complete this chapter is 8-10 minutes, The approximate time required to complete this chapter is 8-10 minutes,
depending upon how much time is spent with experimentation. depending upon how much time is spent with experimentation.
@@ -20,64 +20,64 @@
1. Practice word operations: 1. Practice word operations:
- Place cursor on any word in the line below - Place cursor on any word in the line below
- Type `diw`{normal} to delete INNER word (word without surrounding space) - Type "diw" to delete INNER word (word without surrounding space)
- Type `daw`{normal} to delete A WORD (including trailing whitespace) - Type "daw" to delete A WORD (including trailing whitespace)
- Try with other operators: `ciw`{normal} (change), `yiw`{normal} (yank), - Try with other operators: "ciw" (change), "yiw" (yank),
`gqiw`{normal} (format) "gqiw" (format)
Practice on: "Vim's", (text_object), and 'powerful' words here. ---> Practice on: "Vim's", (text_object), and 'powerful' words here.
2. Work with bracketed content: 2. Work with bracketed content:
- Put cursor inside any () {} [] <> pair below - Put cursor inside any () {} [] <> pair below
- Type `di(`{normal} or `dib`{normal} (delete inner bracket) - Type "di(" or "dib" (delete inner bracket)
- Type `da(`{normal} or `dab`{normal} (delete around brackets) - Type "da(" or "dab" (delete around brackets)
- Try same with `i"`{normal}/`a"`{normal} for quotes, `it`{normal}/`at`{normal} for HTML/XML tags - Try same with "i""/"a"" for quotes, "it"/"at" for HTML/XML tags
Test cases: {curly}, [square], <angle>, and "quoted" items. ---> Test cases: {curly}, [square], <angle>, and "quoted" items.
3. Paragraph and sentence manipulation: 3. Paragraph and sentence manipulation:
- Use `dip`{normal} to delete inner paragraph (cursor anywhere in paragraph) - Use "dip" to delete inner paragraph (cursor anywhere in paragraph)
- Use `vap`{normal} to visually select entire paragraph - Use "vap" to visually select entire paragraph
- Try `das`{normal} to delete a sentence (works between .!? punctuation) - Try "das" to delete a sentence (works between .!? punctuation)
4. Advanced combinations: 4. Advanced combinations:
- `ciwnew<ESC>`{normal} - Change current word to "new" - "ciwnew<ESC>" - Change current word to "new"
- `yss"<ESC>`{normal} - Wrap entire line in quotes (vim-surround plugin style) - "yss"<ESC>" - Wrap entire line in quotes (vim-surround plugin style)
- `gUit`{normal} - Uppercase inner HTML tag content - "gUit" - Uppercase inner HTML tag content
- `va"p`{normal} - Select quoted text and paste over it - "va"p" - Select quoted text and paste over it
Final exercise: (Modify "this" text) by [applying {various} operations]< ---> Final exercise: (Modify "this" text) by [applying {various} operations]<
# Lesson 2.1.2: THE NAMED REGISTERS # Lesson 2.1.2: THE NAMED REGISTERS
** Store two yanked words concurrently and then paste them ** ** Store two yanked words concurrently and then paste them **
1. Move the cursor to the line below marked 1. Move the cursor to the line below marked "--->"
2. Navigate to any point on the word 'Edward' and type `"ayiw`{normal} 2. Navigate to any point on the word 'Edward' and type ""ayiw"
**MNEMONIC**: *into register(") named (a) (y)ank (i)nner (w)ord* **MNEMONIC**: *into register(") named (a) (y)ank (i)nner (w)ord*
3. Navigate forward to the word 'cookie' (`fk`{normal} or `2fc`{normal} 3. Navigate forward to the word 'cookie' ("fk" or "2fc"
or `$2b`{normal} or `/co`{normal} `<ENTER>`{normal}) and type `"byiw`{normal} or "$2b" or "/co <ENTER>") and type ""byiw"
4. Navigate to any point on the word 'Vince' and type `ciw<CTRL-r>a<ESC>`{normal} 4. Navigate to any point on the word 'Vince' and type "ciw<CTRL-r>a<ESC>"
**MNEMONIC**: *(c)hange (i)nner (w)ord with <contents of (r)egister> named (a)* **MNEMONIC**: *(c)hange (i)nner (w)ord with <contents of (r)egister> named (a)*
5. Navigate to any point on the word 'cake' and type `ciw<CTRL-r>b<ESC>`{normal} 5. Navigate to any point on the word 'cake' and type "ciw<CTRL-r>b<ESC>"
a) Edward will henceforth be in charge of the cookie rations ---> a) Edward will henceforth be in charge of the cookie rations
b) In this capacity, Vince will have sole cake discretionary powers b) In this capacity, Vince will have sole cake discretionary powers
NOTE: Delete also works into registers, i.e. `"sdiw`{normal} will delete NOTE: Delete also works into registers, i.e. ""sdiw" will delete
the word under the cursor into register s. the word under the cursor into register s.
REFERENCE: [Registers](registers) REFERENCE: Registers
[Named Registers](quotea) Named Registers
[Motion](text-objects) Motion
[CTRL-R](i_CTRL-R) CTRL-R
# Lesson 2.1.3: THE EXPRESSION REGISTER # Lesson 2.1.3: THE EXPRESSION REGISTER
@@ -88,42 +88,42 @@ REFERENCE: [Registers](registers)
2. Navigate to any point on the supplied number 2. Navigate to any point on the supplied number
3. Type `ciw<CTRL-r>=`{normal}60\*60\*24 `<ENTER>`{normal} 3. Type "ciw<CTRL-r>="60\*60\*24 "<ENTER>"
4. On the next line, enter insert mode and add today's date with 4. On the next line, enter insert mode and add today's date with
`<CTRL-r>=`{normal}`system('date')`{vim} `<ENTER>`{normal} "<CTRL-r>=""system('date') <ENTER>"
NOTE: All calls to system are OS dependent, e.g. on Windows use NOTE: All calls to system are OS dependent, e.g. on Windows use
`system('date /t')`{vim} or `:r!date /t`{vim} "system('date /t')" or ":r!date /t"
I have forgotten the exact number of seconds in a day, is it 84600? I have forgotten the exact number of seconds in a day, is it 84600?
Today's date is: ---> Today's date is:
NOTE: the same can be achieved with `:pu=`{normal}`system('date')`{vim} NOTE: the same can be achieved with ":pu=""system('date')"
or, with fewer keystrokes `:r!date`{vim} or, with fewer keystrokes ":r!date"
REFERENCE: [Expression Register](quote=) REFERENCE: Expression Register
# Lesson 2.1.4: THE NUMBERED REGISTERS # Lesson 2.1.4: THE NUMBERED REGISTERS
** Press `yy`{normal} and `dd`{normal} to witness their effect on the registers ** ** Press "yy" and "dd" to witness their effect on the registers **
1. Move the cursor to the line below marked 1. Move the cursor to the line below marked "--->"
2. yank the zeroth line, then inspect registers with `:reg`{vim} `<ENTER>`{normal} 2. yank the zeroth line, then inspect registers with ":reg <ENTER>"
3. delete line 0. with `"cdd`{normal}, then inspect registers 3. delete line 0. with ""cdd", then inspect registers
(Where do you expect line 0 to be?) (Where do you expect line 0 to be?)
4. continue deleting each successive line, inspecting `:reg`{vim} as you go 4. continue deleting each successive line, inspecting ":reg" as you go
NOTE: You should notice that old full-line deletions move down the list NOTE: You should notice that old full-line deletions move down the list
as new full-line deletions are added as new full-line deletions are added
5. Now (p)aste the following registers in order; c, 7, 4, 8, 2. i.e. `"7p`{normal} 5. Now (p)aste the following registers in order; c, 7, 4, 8, 2. i.e. ""7p"
0. This ---> 0. This
9. wobble 9. wobble
8. secret 8. secret
7. is 7. is
@@ -135,11 +135,11 @@ NOTE: You should notice that old full-line deletions move down the list
1. tribute 1. tribute
NOTE: Whole line deletions (`dd`{normal}) are much longer lived in the NOTE: Whole line deletions ("dd") are much longer lived in the
numbered registers than whole line yanks, or deletions involving numbered registers than whole line yanks, or deletions involving
smaller movements smaller movements
REFERENCE: [Numbered Registers](quote0) REFERENCE: Numbered Registers
# Lesson 2.1.5: SPECIAL REGISTERS # Lesson 2.1.5: SPECIAL REGISTERS
@@ -147,44 +147,44 @@ REFERENCE: [Numbered Registers](quote0)
** Use system clipboard and blackhole registers for advanced editing ** ** Use system clipboard and blackhole registers for advanced editing **
Note: Clipboard use requires a working clipboard provider for the current Note: Clipboard use requires a working clipboard provider for the current
windowing system on Linux. Check with `:checkhealth vim.provider`{vim} windowing system on Linux. Check with ":checkhealth vim.provider"
and `:echo has('clipboard_working')`{vim} and ":echo has('clipboard_working')"
1. Clipboard registers `+`{normal} and `*`{normal} : 1. Clipboard registers "+" and "*" :
- `"+y`{normal} - Yank to system clipboard (e.g. `"+yy`{normal} for current line) - ""+y" - Yank to system clipboard (e.g. ""+yy" for current line)
- `"+p`{normal} - Paste from system clipboard - ""+p" - Paste from system clipboard
- `"*`{normal} is primary selection on X11 (middle-click), `"+`{normal} is clipboard - ""*" is primary selection on X11 (middle-click), ""+" is clipboard
Try: "+yy then paste into another application with Ctrl-V or Cmd+V ---> Try: "+yy then paste into another application with Ctrl-V or Cmd+V
2. Blackhole register `_`{normal} discards text: 2. Blackhole register "_" discards text:
- `"_daw`{normal} - Delete word without saving to any register - ""_daw" - Delete word without saving to any register
- Useful when you don't want to overwrite your default `"`{normal} register - Useful when you don't want to overwrite your default `"` register
- Note this is using the "a Word" text object, introduced in a previous - Note this is using the "a Word" text object, introduced in a previous
lession lession
- `"_dd`{normal} - Delete line without saving - ""_dd" - Delete line without saving
- `"_dap`{normal} - Delete paragraph without saving - ""_dap" - Delete paragraph without saving
- Combine with counts: `3"_dw`{normal} - Combine with counts: "3"_dw"
Practice: "_diw on any word to delete it without affecting yank history ---> Practice: "_diw on any word to delete it without affecting yank history
3. Combine with visual selections: 3. Combine with visual selections:
- Select text with V then `"+y`{normal} - Select text with V then ""+y"
- To paste from clipboard in insert mode: `<CTRL-R>+`{normal} - To paste from clipboard in insert mode: "<CTRL-R>+"
- Try opening another application and paste from clipboard - Try opening another application and paste from clipboard
4. Remember: 4. Remember:
- Clipboard registers work across different Vim instances - Clipboard registers work across different Vim instances
- Clipboard register is not always working - Clipboard register is not always working
- Blackhole prevents accidental register overwrites - Blackhole prevents accidental register overwrites
- Default `"`{normal} register is still available for normal yank/paste - Default `"` register is still available for normal yank/paste
- Named registers (a-z) remain private to each Vim session - Named registers (a-z) remain private to each Vim session
5. Clipboard troubleshooting: 5. Clipboard troubleshooting:
- Check support with `:echo has('clipboard_working')`{vim} - Check support with ":echo has('clipboard_working')"
- 1 means available, 0 means not - 1 means available, 0 means not
- On Linux, may need xsel, xclip or wl-clipboard - On Linux, may need xsel, xclip or wl-clipboard
(check `:checkhealth vim.provider`{vim} result) (check ":checkhealth vim.provider" result)
# Lesson 2.1.6: THE BEAUTY OF MARKS # Lesson 2.1.6: THE BEAUTY OF MARKS
@@ -193,29 +193,29 @@ Practice: "_diw on any word to delete it without affecting yank history
NOTE: a common conundrum when coding is moving around large chunks of code. NOTE: a common conundrum when coding is moving around large chunks of code.
The following technique helps avoid number line calculations associated The following technique helps avoid number line calculations associated
with operations like `"a147d`{normal} or `:945,1091d a`{vim} or even worse with operations like ""a147d" or ":945,1091d a" or even worse
using `i<CTRL-r>=`{normal}1091-945 `<ENTER>`{normal} first using "i<CTRL-r>="1091-945 "<ENTER>" first
1. Move the cursor to the line below marked 1. Move the cursor to the line below marked "--->"
2. Go to the first line of the function and mark it with `ma`{normal} 2. Go to the first line of the function and mark it with "ma"
NOTE: exact position on line is NOT important! NOTE: exact position on line is NOT important!
3. Navigate to the end of the line and then the end of the code block 3. Navigate to the end of the line and then the end of the code block
with `$%`{normal} with "$%"
4. Delete the block into register a with `"ad'a`{normal} 4. Delete the block into register a with ""ad'a"
**MNEMONIC**: *into register(") named (a) put the (d)eletion from the cursor to **MNEMONIC**: *into register(") named (a) put the (d)eletion from the cursor to
the LINE containing mark(') (a)* the LINE containing mark(') (a)*
5. Paste the block between BBB and CCC `"ap`{normal} 5. Paste the block between BBB and CCC ""ap"
NOTE: practice this operation multiple times to become fluent `ma$%"ad'a`{normal} NOTE: practice this operation multiple times to become fluent "ma$%"ad'a"
~~~ cmd ~~~ cmd
AAA ---> AAA
function itGotRealBigRealFast() { function itGotRealBigRealFast() {
if ( somethingIsTrue ) { if ( somethingIsTrue ) {
doIt() doIt()
@@ -236,46 +236,46 @@ 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 completely independent of mark a. This is not true of registers and
macros. macros.
REFERENCE: [Marks](marks) REFERENCE: Marks
[Mark Motions](mark-motions) (difference between ' and \`) Mark Motions (difference between ' and \`)
# Lesson 2.1 SUMMARY # Lesson 2.1 SUMMARY
1. Text objects provide precision editing: 1. Text objects provide precision editing:
- `iw`{normal}/`aw`{normal} - inner/around word - "iw"/"aw" - inner/around word
- `i[`{normal}/`a[`{normal} - inner/around bracket - "i["/"a[" - inner/around bracket
- `i"`{normal}/`a"`{normal} - inner/around quotes - "i""/"a"" - inner/around quotes
- `it`{normal}/`at`{normal} - inner/around tag - "it"/"at" - inner/around tag
- `ip`{normal}/`ap`{normal} - inner/around paragraph - "ip"/"ap" - inner/around paragraph
- `is`{normal}/`as`{normal} - inner/around sentence - "is"/"as" - inner/around sentence
2. To store (yank, delete) text into, and retrieve (paste) from, a total of 2. To store (yank, delete) text into, and retrieve (paste) from, a total of
26 registers (a-z) 26 registers (a-z)
3. Yank a whole word from anywhere within a word: `yiw`{normal} 3. Yank a whole word from anywhere within a word: "yiw"
4. Change a whole word from anywhere within a word: `ciw`{normal} 4. Change a whole word from anywhere within a word: "ciw"
5. Insert text directly from registers in insert mode: `<CTRL-R>a`{normal} 5. Insert text directly from registers in insert mode: "<CTRL-R>a"
6. Insert the results of simple arithmetic operations: 6. Insert the results of simple arithmetic operations:
`<CTRL-r>=`{normal}60\*60`<ENTER>`{normal} in insert mode "<CTRL-r>="60\*60"<ENTER>" in insert mode
7. Insert the results of system calls: 7. Insert the results of system calls:
`<CTRL-r>=`{normal}`system('ls -1')`{vim}`<ENTER>`{normal} in insert mode "<CTRL-r>=""system('ls -1')""<ENTER>" in insert mode
8. Inspect registers with `:reg`{vim} 8. Inspect registers with ":reg"
9. Learn the final destination of whole line deletions: `dd`{normal} in 9. Learn the final destination of whole line deletions: "dd" in
the numbered registers, i.e. descending from register 1 - 9. Appreciate the numbered registers, i.e. descending from register 1 - 9. Appreciate
that whole line deletions are preserved in the numbered registers longer that whole line deletions are preserved in the numbered registers longer
than any other operation than any other operation
10. Learn the final destination of all yanks in the numbered registers and 10. Learn the final destination of all yanks in the numbered registers and
how ephemeral they are how ephemeral they are
11. Place marks from command mode `m[a-zA-Z0-9]`{normal} 11. Place marks from command mode "m[a-zA-Z0-9]"
12. Move line-wise to a mark with `'`{normal} 12. Move line-wise to a mark with "'"
13. Special registers: 13. Special registers:
- `"+`{normal}/`"*`{normal} - System clipboard (OS dependent) - ""+"/""*" - System clipboard (OS dependent)
- `"_`{normal} - Blackhole (discard deleted/yanked text) - ""_" - Blackhole (discard deleted/yanked text)
- `"=`{normal} - Expression register - ""=" - Expression register
# CONCLUSION # CONCLUSION

View File

@@ -1,15 +1,6 @@
{ {
"expect": { "expect": {
"28": -1,
"36": -1,
"49": -1,
"71": -1,
"72": "b) In this capacity, Edward will have sole cookie discretionary powers", "72": "b) In this capacity, Edward will have sole cookie discretionary powers",
"99": "I have forgotten the exact number of seconds in a day, is it 86400", "99": "I have forgotten the exact number of seconds in a day, is it 86400"
"100": -1,
"126": -1,
"158": -1,
"169": -1,
"218": -1
} }
} }

View File

@@ -11,21 +11,21 @@ Neovim は、このチュートリアルで説明するには多すぎる程の
テキストをただ読むだけでは、何が重要だったか忘れてしまうでしょう! テキストをただ読むだけでは、何が重要だったか忘れてしまうでしょう!
それでは、CapsLock キーが押されていないことを確認した後、画面にレッスン 0 が全部 それでは、CapsLock キーが押されていないことを確認した後、画面にレッスン 0 が全部
表示されるところまで、`j`{normal} キーを押してカーソルを移動しましょう。 表示されるところまで、"j" キーを押してカーソルを移動しましょう。
# レッスン 0 # レッスン 0
NOTE: 以下の練習用コマンドにはこの文章を変更するものもありますが、それらの変更は NOTE: 以下の練習用コマンドにはこの文章を変更するものもありますが、それらの変更は
保存されません。失敗を恐れる必要はありません、 [<Esc>](<Esc>) キーを押した後、 [u](u) キーを押 保存されません。失敗を恐れる必要はありません、 <Esc> キーを押した後、 u キーを押
すことで最後の操作を元に戻せる事を覚えておいてください。 すことで最後の操作を元に戻せる事を覚えておいてください。
このチュートリアルはインタラクティブな設計になっており、あなたが知っておくべきこ このチュートリアルはインタラクティブな設計になっており、あなたが知っておくべきこ
とがいくつかあります。 とがいくつかあります。
- [このようなリンク](holy-grail )の上で [<Enter>](<Enter>) キーを押すことで、リンクされたヘルプを開くこと - このようなリンクの上で <Enter> キーを押すことで、リンクされたヘルプを開くこと
ができます。 ができます。
- または、ドキュメントで検索したい単語の上で [K](K) キー(大文字)を押してみましょう。 - または、ドキュメントで検索したい単語の上で K キー(大文字)を押してみましょう。
(注: 日本語の単語には対応していません。) (注: 日本語の単語には対応していません。)
- ヘルプウィンドウは `:q`{vim} `<Enter>`{normal} で閉じることができます。 - ヘルプウィンドウは ":q <Enter>" で閉じることができます。
画面の左端に ✗ が表示されている場合、その行にあるテキストを編集しなければなりま 画面の左端に ✗ が表示されている場合、その行にあるテキストを編集しなければなりま
せん。正しいテキストに書き換えることで、左端の ✗ は ✓ に変わります。 せん。正しいテキストに書き換えることで、左端の ✗ は ✓ に変わります。
@@ -33,16 +33,16 @@ Neovim がどんなにステキか、おわかりいただけるでしょうか?
また、次のようにコマンドを実行するよう求められることや、(後で詳しく説明します。) また、次のようにコマンドを実行するよう求められることや、(後で詳しく説明します。)
`:help`{vim} `<Enter>`{normal} ":help <Enter>"
キーシークエンスを押すこともあります。 キーシークエンスを押すこともあります。
~~~ normal ~~~ normal
<Esc>0f<Space>d3wP$P <Esc>0f<Space>d3wP$P
~~~ ~~~
< と > の間に囲まれたテキスト(例えば `<Enter>`{normal})は、そのテキストをタイプするのでは < と > の間に囲まれたテキスト(例えば "<Enter>")は、そのテキストをタイプするのでは
なく、そのキーを押すことを表しています。 なく、そのキーを押すことを表しています。
では、次のレッスンに向かいましょう。( `j`{normal} キーでスクロールダウンします。) では、次のレッスンに向かいましょう。( "j" キーでスクロールダウンします。)
# レッスン 1.1: カーソルの移動 # レッスン 1.1: カーソルの移動
@@ -61,7 +61,7 @@ Neovim がどんなにステキか、おわかりいただけるでしょうか?
3. 下へのキーを使って、レッスン1.2 に移動しましょう。 3. 下へのキーを使って、レッスン1.2 に移動しましょう。
NOTE: 何を入力しているか判らなくなったら、`<Esc>`{normal} を押してノーマルモードにします。 NOTE: 何を入力しているか判らなくなったら、"<Esc>" を押してノーマルモードにします。
それから入力しようとしていたコマンドを再入力しましょう。 それから入力しようとしていたコマンドを再入力しましょう。
NOTE: カーソルキーでも移動できます。しかし hjkl に一度慣れてしまえば、はるかに速 NOTE: カーソルキーでも移動できます。しかし hjkl に一度慣れてしまえば、はるかに速
@@ -71,36 +71,36 @@ NOTE: カーソルキーでも移動できます。しかし hjkl に一度慣
!! NOTE: 以下のあらゆるステップを行う前に、このレッスンをすべて読みましょう!! !! NOTE: 以下のあらゆるステップを行う前に、このレッスンをすべて読みましょう!!
1. `<Esc>`{normal} キーを押しましょう。(確実にノーマルモードにするため) 1. "<Esc>" キーを押しましょう。(確実にノーマルモードにするため)
2. 次のようにタイプします: 2. 次のようにタイプします:
`:q!`{vim} `<Enter>`{normal} ":q! <Enter>"
これにより編集した内容を保存せずにエディタが終了します。 これにより編集した内容を保存せずにエディタが終了します。
3. Neovim を開いて、このチュートリアルを始める為のコマンドを実行し、ここに戻っ 3. Neovim を開いて、このチュートリアルを始める為のコマンドを実行し、ここに戻っ
てきます。そのコマンドは: てきます。そのコマンドは:
`:Tutor`{vim} `<Enter>`{normal} ":Tutor <Enter>"
4. これまでのステップを覚え自信がついたならば、ステップ 1 から 3 までを実際に試 4. これまでのステップを覚え自信がついたならば、ステップ 1 から 3 までを実際に試
して、エディタを1度終了してから再び起動しましょう。 して、エディタを1度終了してから再び起動しましょう。
NOTE: [:q!](:q) `<Enter>`{normal} は全ての変更を破棄します。 NOTE: :q! "<Enter>" は全ての変更を破棄します。
後に変更をファイルに保存する方法についても勉強していきましょう。 後に変更をファイルに保存する方法についても勉強していきましょう。
5. レッスン 1.3 までカーソルを移動させましょう。 5. レッスン 1.3 までカーソルを移動させましょう。
# レッスン 1.3: テキスト編集: 削除 # レッスン 1.3: テキスト編集: 削除
** カーソルの下の文字を削除するには `x`{normal} を押します。 ** ** カーソルの下の文字を削除するには "x" を押します。 **
1. 以下の ✗ と示された行にカーソルを移動しましょう。 1. 以下の ✗ と示された行にカーソルを移動しましょう。
2. 間違いを修正するために、削除する最初の文字までカーソルを移動します。 2. 間違いを修正するために、削除する最初の文字までカーソルを移動します。
3. 不必要な文字を [x キー](x) を押して削除しましょう。 3. 不必要な文字を x キー を押して削除しましょう。
4. 文が正しくなるまで ステップ 2 から 4 を繰り返しましょう。 4. 文が正しくなるまで ステップ 2 から 4 を繰り返しましょう。
@@ -114,16 +114,16 @@ NOTE: 全てのレッスンを通じて、頭だけで覚えようとしない
# レッスン 1.4: テキスト編集: 挿入 # レッスン 1.4: テキスト編集: 挿入
** テキストを挿入(Insert)するには `i`{normal} を押します。 ** ** テキストを挿入(Insert)するには "i" を押します。 **
1. 以下の ✗ と示された最初の行にカーソルを移動しましょう。 1. 以下の ✗ と示された最初の行にカーソルを移動しましょう。
2. 1行目を2行目と同じ様にするために、テキストを挿入しなければならない位置の次の 2. 1行目を2行目と同じ様にするために、テキストを挿入しなければならない位置の次の
文字にカーソルを移動します。 文字にカーソルを移動します。
3. `i`{normal} キーを押してから、追加が必要な文字をタイプしましょう。 3. "i" キーを押してから、追加が必要な文字をタイプしましょう。
4. 間違いを修正したら `<Esc>`{normal} を押してノーマルモードに戻り、正しい文になる様にス 4. 間違いを修正したら "<Esc>" を押してノーマルモードに戻り、正しい文になる様にス
テップ 2 から 4 を繰り返しましょう。 テップ 2 から 4 を繰り返しましょう。
この には 足り テキスト が 。 この には 足り テキスト が 。
@@ -133,14 +133,14 @@ NOTE: 全てのレッスンを通じて、頭だけで覚えようとしない
# レッスン 1.5: テキスト編集: 追加 # レッスン 1.5: テキスト編集: 追加
** テキストを追加(Append)するには `A`{normal} を押しましょう。 ** ** テキストを追加(Append)するには "A" を押しましょう。 **
1. 以下の ✗ と示された最初の行にカーソルを移動しましょう。 1. 以下の ✗ と示された最初の行にカーソルを移動しましょう。
カーソルがその行のどの文字上にあってもかまいません。 カーソルがその行のどの文字上にあってもかまいません。
2. [A](A) キー(大文字)を押してから、追加が必要な文字をタイプしましょう。 2. A キー(大文字)を押してから、追加が必要な文字をタイプしましょう。
3. テキストを追加し終えたら、 `<Esc>`{normal} を押してノーマルモードに戻りましょう。 3. テキストを追加し終えたら、 "<Esc>" を押してノーマルモードに戻りましょう。
4. 2行目の ✗ と示された場所へ移動し、ステップ 2 から 3 を繰り返して文章を修正し 4. 2行目の ✗ と示された場所へ移動し、ステップ 2 から 3 を繰り返して文章を修正し
ましょう。 ましょう。
@@ -154,11 +154,11 @@ NOTE: 全てのレッスンを通じて、頭だけで覚えようとしない
# レッスン 1.6: ファイルの編集 # レッスン 1.6: ファイルの編集
** ファイルを保存して終了するには `:wq`{vim} とタイプします。 ** ** ファイルを保存して終了するには ":wq" とタイプします。 **
!! NOTE: 以下のあらゆるステップを行う前に、このレッスンをすべて読みましょう!! !! NOTE: 以下のあらゆるステップを行う前に、このレッスンをすべて読みましょう!!
1. レッスン 1.2 でやったように `:q!`{vim} を入力して、このチュートリアルを終了します。 1. レッスン 1.2 でやったように ":q!" を入力して、このチュートリアルを終了します。
もしくは、別のターミナルにアクセスできる場合、そこで以下の内容を行います。 もしくは、別のターミナルにアクセスできる場合、そこで以下の内容を行います。
2. シェルプロンプトでこのコマンドをタイプします: 2. シェルプロンプトでこのコマンドをタイプします:
@@ -174,7 +174,7 @@ NOTE: 全てのレッスンを通じて、頭だけで覚えようとしない
~~~ cmd ~~~ cmd
:wq :wq
~~~ ~~~
コマンドを実行するには `<Enter>`{normal} を押さなければなりません。 コマンドを実行するには "<Enter>" を押さなければなりません。
5. ステップ 1 でこのチュートリアルを終了した場合は再度起動した後、以下の要約へ 5. ステップ 1 でこのチュートリアルを終了した場合は再度起動した後、以下の要約へ
進みましょう。 進みましょう。
@@ -190,31 +190,31 @@ NOTE: 全てのレッスンを通じて、頭だけで覚えようとしない
~~~ sh ~~~ sh
$ nvim FILENAME $ nvim FILENAME
~~~ ~~~
3. Neovim を終了するには: `<Esc>`{normal} `:q!`{vim} `<Enter>`{normal} とタイプします(変更を破棄)。 3. Neovim を終了するには: "<Esc> :q! <Enter>" とタイプします(変更を破棄)。
もしくは: `<Esc>`{normal} `:wq`{vim} `<Enter>`{normal} とタイプします(変更を保存)。 もしくは: "<Esc> :wq <Enter>" とタイプします(変更を保存)。
4. カーソルの下の文字を削除するには、ノーマルモードで `x`{normal} とタイプします。 4. カーソルの下の文字を削除するには、ノーマルモードで "x" とタイプします。
5. カーソルの位置に文字を挿入するには、ノーマルモードで i とタイプします。 5. カーソルの位置に文字を挿入するには、ノーマルモードで i とタイプします。
`i`{normal} テキストのタイプ `<Esc>`{normal} カーソル位置に追加 "i" テキストのタイプ "<Esc>" カーソル位置に追加
`A`{normal} テキストの追加 `<Esc>`{normal} 行末に追加 "A" テキストの追加 "<Esc>" 行末に追加
NOTE: `<Esc>`{normal} キーを押すとノーマルモードに移行します。その際間違ったり、入力途中の NOTE: "<Esc>" キーを押すとノーマルモードに移行します。その際間違ったり、入力途中の
コマンドを取り消すことができます。 コマンドを取り消すことができます。
さて、続けてレッスン 2 を始めましょう。 さて、続けてレッスン 2 を始めましょう。
# レッスン 2.1: 削除コマンド # レッスン 2.1: 削除コマンド
** 単語の末尾までを削除するには `dw`{normal} とタイプしましょう。 ** ** 単語の末尾までを削除するには "dw" とタイプしましょう。 **
1. 確実にノーマルモードにするため `<Esc>`{normal} を押しましょう。 1. 確実にノーマルモードにするため "<Esc>" を押しましょう。
2. 以下の ✗ と示された行にカーソルを移動しましょう。 2. 以下の ✗ と示された行にカーソルを移動しましょう。
3. 消したい単語の先頭にカーソルを移動しましょう。 3. 消したい単語の先頭にカーソルを移動しましょう。
4. 単語を削除するために [d](d)[w](w) とタイプしましょう。 4. 単語を削除するために dw とタイプしましょう。
この 文 紙 には いくつか たのしい 必要のない 単語 が 含まれて います。 この 文 紙 には いくつか たのしい 必要のない 単語 が 含まれて います。
@@ -222,15 +222,15 @@ NOTE: `<Esc>`{normal} キーを押すとノーマルモードに移行します
# レッスン 2.2: その他の削除コマンド # レッスン 2.2: その他の削除コマンド
** 行の末尾までを削除するには `d$`{normal} とタイプしましょう。 ** ** 行の末尾までを削除するには "d$" とタイプしましょう。 **
1. 確実にノーマルモードにするため `<Esc>`{normal} を押しましょう。 1. 確実にノーマルモードにするため "<Esc>" を押しましょう。
2. 以下の ✗ と示された行にカーソルを移動しましょう。 2. 以下の ✗ と示された行にカーソルを移動しましょう。
3. 正しい文の末尾へカーソルを移動しましょう(最初の 。 の後です)。 3. 正しい文の末尾へカーソルを移動しましょう(最初の 。 の後です)。
4. 行末まで削除するために `d$`{normal} とタイプしましょう。 4. 行末まで削除するために "d$" とタイプしましょう。
誰かがこの行の最後を2度タイプしました。 2度タイプしました。 誰かがこの行の最後を2度タイプしました。 2度タイプしました。
@@ -238,8 +238,8 @@ NOTE: `<Esc>`{normal} キーを押すとノーマルモードに移行します
# レッスン 2.3: オペレータとモーション # レッスン 2.3: オペレータとモーション
テキストに変更を加える多くのコマンドは[オペレータ](operator)と[モーション](navigation)からなります。 テキストに変更を加える多くのコマンドはオペレータとモーションからなります。
削除(Delete)コマンド [d](d) のオペレータは次の様になっています: 削除(Delete)コマンド d のオペレータは次の様になっています:
d モーション d モーション
@@ -248,11 +248,11 @@ NOTE: `<Esc>`{normal} キーを押すとノーマルモードに移行します
モーション - 何に対して働きかけるか(以下に挙げます)。 モーション - 何に対して働きかけるか(以下に挙げます)。
モーション一覧の一部: モーション一覧の一部:
[w](w) - 次の単語の先頭まで。(カーソル位置の単語の先頭を除く) w - 次の単語の先頭まで。(カーソル位置の単語の先頭を除く)
[e](e) - 次の単語の末尾まで。(カーソル位置の単語の末尾を含む) e - 次の単語の末尾まで。(カーソル位置の単語の末尾を含む)
[$]($) - 行末まで。(カーソル位置の単語の末尾を含む) $ - 行末まで。(カーソル位置の単語の末尾を含む)
つまり `de`{normal} とタイプすると、カーソル位置から単語の終わりまでを削除します。 つまり "de" とタイプすると、カーソル位置から単語の終わりまでを削除します。
NOTE: ノーマルモードにてオペレータなしにモーションを押すことで、先述した位置にカ NOTE: ノーマルモードにてオペレータなしにモーションを押すことで、先述した位置にカ
ーソルが移動します。 ーソルが移動します。
@@ -261,17 +261,17 @@ NOTE: ノーマルモードにてオペレータなしにモーションを押
** 何回も繰り返し行いたいモーションの前にその回数をタイプします。 ** ** 何回も繰り返し行いたいモーションの前にその回数をタイプします。 **
1. 以下の と示された行の先頭にカーソルを移動します。 1. 以下の "--->" と示された行の先頭にカーソルを移動します。
2. `2w`{normal} をタイプして単語2つ分先に移動します。 2. "2w" をタイプして単語2つ分先に移動します。
3. `3e`{normal} をタイプして3つ目の単語の終端に移動します。 3. "3e" をタイプして3つ目の単語の終端に移動します。
4. `0`{normal} ([ゼロ](0))をタイプして行頭に移動します。 4. "0" (ゼロ)をタイプして行頭に移動します。
5. ステップ 2 と 3 を違う数値を使って繰り返します。 5. ステップ 2 と 3 を違う数値を使って繰り返します。
This is just a line with words you can move around in. ---> This is just a line with words you can move around in.
6. レッスン 2.5 に進みましょう。 6. レッスン 2.5 に進みましょう。
@@ -285,7 +285,7 @@ This is just a line with words you can move around in.
1. ✗ と示された行の最初の大文字の単語にカーソルを移動しましょう。 1. ✗ と示された行の最初の大文字の単語にカーソルを移動しましょう。
2. 大文字の単語2つを `d2w`{normal} とタイプして削除します。 2. 大文字の単語2つを "d2w" とタイプして削除します。
3. 異なるカウントを使ってステップ 1 と 2 を繰り返し、残りの連続した大文字の単語 3. 異なるカウントを使ってステップ 1 と 2 を繰り返し、残りの連続した大文字の単語
を削除します。 を削除します。
@@ -294,18 +294,18 @@ This is just a line with words you can move around in.
# レッスン 2.6: 行の操作 # レッスン 2.6: 行の操作
** 行全体を削除するには `dd`{normal} とタイプします。 ** ** 行全体を削除するには "dd" とタイプします。 **
行全体を削除する頻度が多いので、Vi のデザイナーは行の削除を d の2回タイプという 行全体を削除する頻度が多いので、Vi のデザイナーは行の削除を d の2回タイプという
簡単なものに決めました。 簡単なものに決めました。
1. 以下の詩の2行目にカーソルを移動します。 1. 以下の詩の2行目にカーソルを移動します。
2. [dd](dd) とタイプして行を削除します。 2. dd とタイプして行を削除します。
3. さらに4行目に移動します。 3. さらに4行目に移動します。
4. `2dd`{normal} とタイプして2行を削除します。 4. "2dd" とタイプして2行を削除します。
1) 薔薇は赤く 1) 薔薇は赤く
2) 泥は楽しい 2) 泥は楽しい
@@ -317,21 +317,21 @@ This is just a line with words you can move around in.
# Lesson 2.7: やり直しコマンド # Lesson 2.7: やり直しコマンド
** 最後のコマンドを取り消す(Undo)には `u`{normal} を押します。`U`{normal} は行全体の取り消しです。** ** 最後のコマンドを取り消す(Undo)には "u" を押します。"U" は行全体の取り消しです。**
1. 以下の ✗ と示された行にある、最初の間違いにカーソルを移動しましょう。 1. 以下の ✗ と示された行にある、最初の間違いにカーソルを移動しましょう。
2. `x`{normal} をタイプして最初のいらない文字を削除しましょう。 2. "x" をタイプして最初のいらない文字を削除しましょう。
3. では、`u`{normal} をタイプして最後に実行したコマンドを取り消しましょう。 3. では、"u" をタイプして最後に実行したコマンドを取り消しましょう。
4. 今度は、`x`{normal} を使用して行内の誤りを全て修正しましょう。 4. 今度は、"x" を使用して行内の誤りを全て修正しましょう。
5. 大文字の `U`{normal} をタイプして、行を元の状態に戻しましょう。 5. 大文字の "U" をタイプして、行を元の状態に戻しましょう。
6. `u`{normal} をタイプして直前の `U`{normal} コマンドを取り消しましょう。 6. "u" をタイプして直前の "U" コマンドを取り消しましょう。
7. ではコマンドを再実行するのに `<C-r>`{normal} (Ctrl + R)を数回タイプしてみましょう(取り 7. ではコマンドを再実行するのに "<C-r>" (Ctrl + R)を数回タイプしてみましょう(取り
消しの取り消し)。 消しの取り消し)。
このの行のの間違いを修正々し、後でそれらの修正をを取り消しまますす。 このの行のの間違いを修正々し、後でそれらの修正をを取り消しまますす。
@@ -340,13 +340,13 @@ This is just a line with words you can move around in.
# レッスン 2 要約 # レッスン 2 要約
1. カーソル位置から次の単語までを削除: `dw`{normal} 1. カーソル位置から次の単語までを削除: "dw"
2. カーソル位置から行の末尾までを削除: `d$`{normal} 2. カーソル位置から行の末尾までを削除: "d$"
3. 行全体を削除: `dd`{normal} 3. 行全体を削除: "dd"
4. モーションを繰り返すには数値を付与: `2w`{normal} 4. モーションを繰り返すには数値を付与: "2w"
5. 変更に用いるコマンドの形式は: 5. 変更に用いるコマンドの形式は:
@@ -354,29 +354,29 @@ This is just a line with words you can move around in.
それぞれ: それぞれ:
オペレータ - オペレータ - 削除 [d](d) の類で何をするか オペレータ - オペレータ - 削除 d の類で何をするか
[数値] - そのコマンドを何回繰り返すか [数値] - そのコマンドを何回繰り返すか
モーション - テキストの何に対して働きかけるか、例えば: モーション - テキストの何に対して働きかけるか、例えば:
[w](w) (単語), w (単語),
[$]($) (行末), など。 $ (行末), など。
6. 行の先頭に移動するにはゼロを使用します: [0](0) 6. 行の先頭に移動するにはゼロを使用します: 0
7. 前回の動作を取り消し: `u`{normal} (小文字 u) 7. 前回の動作を取り消し: "u" (小文字 u)
行全体の変更を取り消し: `U`{normal} (大文字 U) 行全体の変更を取り消し: "U" (大文字 U)
取り消しの取り消し: `<C-r>`{normal} (Ctrl + R) 取り消しの取り消し: "<C-r>" (Ctrl + R)
# レッスン 3.1: 貼り付けコマンド # レッスン 3.1: 貼り付けコマンド
** 最後に削除された行をカーソルの後に貼り付ける(Put)には `p`{normal} をタイプします。 ** ** 最後に削除された行をカーソルの後に貼り付ける(Put)には "p" をタイプします。 **
1. `--->` と示された以下の最初の行にカーソルを移動しましょう。 1. `--->` と示された以下の最初の行にカーソルを移動しましょう。
2. `dd`{normal} とタイプして行を削除し、Neovim のレジスタに格納しましょう。 2. "dd" とタイプして行を削除し、Neovim のレジスタに格納しましょう。
3. 削除した行が本来あるべき位置の上の行である c) 行にカーソルを移動しましょう。 3. 削除した行が本来あるべき位置の上の行である c) 行にカーソルを移動しましょう。
4. `p`{normal} をタイプして格納した行をカーソルの下に戻します。 4. "p" をタイプして格納した行をカーソルの下に戻します。
5. 順番が正しくなる様にステップ 2 から 4 を繰り返しましょう。 5. 順番が正しくなる様にステップ 2 から 4 を繰り返しましょう。
@@ -385,17 +385,17 @@ This is just a line with words you can move around in.
---> c) 知恵とは学ぶもの ---> c) 知恵とは学ぶもの
---> a) 薔薇は赤く ---> a) 薔薇は赤く
NOTE: `P`{normal} (大文字 P)とタイプすることで、カーソルの前に貼り付ける事もできます。 NOTE: "P" (大文字 P)とタイプすることで、カーソルの前に貼り付ける事もできます。
# レッスン 3.2: 置き換えコマンド # レッスン 3.2: 置き換えコマンド
** カーソルの下の文字を x に置き換える(Replace)には `rx`{normal} をタイプします。 ** ** カーソルの下の文字を x に置き換える(Replace)には "rx" をタイプします。 **
1. 以下の ✗ と示された最初の行にカーソルを移動しましょう。 1. 以下の ✗ と示された最初の行にカーソルを移動しましょう。
2. 最初の間違いにカーソルを移動しましょう。 2. 最初の間違いにカーソルを移動しましょう。
3. `r`{normal} とタイプし、間違っている文字を置き換える、正しい文字をタイプしましょう。 3. "r" とタイプし、間違っている文字を置き換える、正しい文字をタイプしましょう。
4. 最初の行が正しくなるまでステップ 2 から 3 を繰り返しましょう。 4. 最初の行が正しくなるまでステップ 2 から 3 を繰り返しましょう。
@@ -408,24 +408,24 @@ NOTE: 実際に試しましょう。決して覚えるだけにはしないこ
# レッスン 3.3: 変更オペレータ # レッスン 3.3: 変更オペレータ
** 単語の末尾までを変更(Change)するには `ce`{normal} とタイプします。 ** ** 単語の末尾までを変更(Change)するには "ce" とタイプします。 **
1. 以下の ✗ と示された最初の行にカーソルを移動しましょう。 1. 以下の ✗ と示された最初の行にカーソルを移動しましょう。
2. "lubw" の "u" の位置にカーソルを移動しましょう。 2. "lubw" の "u" の位置にカーソルを移動しましょう。
3. `ce`{normal} とタイプし、正しい単語をタイプしましょう(この場合 "ine" とタイプ)。 3. "ce" とタイプし、正しい単語をタイプしましょう(この場合 "ine" とタイプ)。
4. `<Esc>`{normal} をタイプしてから次の間違い(変更すべき文字の先頭)に移動します。 4. "<Esc>" をタイプしてから次の間違い(変更すべき文字の先頭)に移動します。
5. 最初の行が次の行の様になるまでステップ 3 と 4 を繰り返します。 5. 最初の行が次の行の様になるまでステップ 3 と 4 を繰り返します。
This lubw has a few wptfd that mrrf changing usf the change operator. This lubw has a few wptfd that mrrf changing usf the change operator.
This line has a few words that need changing using the change operator. This line has a few words that need changing using the change operator.
[c](c)e は単語を削除した後、挿入モードに入ることに注意しましょう。 ce は単語を削除した後、挿入モードに入ることに注意しましょう。
# レッスン 3.4: `c`{normal} を使用したその他の変更 # レッスン 3.4: "c" を使用したその他の変更
** 変更オペレータは、削除と同じ様にモーションを使用します。 ** ** 変更オペレータは、削除と同じ様にモーションを使用します。 **
@@ -433,13 +433,13 @@ This line has a few words that need changing using the change operator.
c [数値] モーション c [数値] モーション
2. モーションも同じで、`w`{normal} (単語) や `$`{normal} (行末まで)といったものです。 2. モーションも同じで、"w" (単語) や "$" (行末まで)といったものです。
3. 以下の ✗ と示された最初の行にカーソルを移動しましょう。 3. 以下の ✗ と示された最初の行にカーソルを移動しましょう。
4. 最初の間違いへカーソルを移動しましょう。 4. 最初の間違いへカーソルを移動しましょう。
5. `c$`{normal} とタイプして行の残りを2行目の様にし、`<Esc>`{normal} を押しましょう。 5. "c$" とタイプして行の残りを2行目の様にし、"<Esc>" を押しましょう。
The end of this line needs some help to make it like the second. The end of this line needs some help to make it like the second.
The end of this line needs to be corrected using the c$ command. The end of this line needs to be corrected using the c$ command.
@@ -448,15 +448,15 @@ NOTE: タイプ中の間違いはバックスペースキーを使って直す
# レッスン 3 要約 # レッスン 3 要約
1. 既に削除されたテキストを再配置するには、[p](p) をタイプします。 1. 既に削除されたテキストを再配置するには、p をタイプします。
これは削除されたテキストをカーソルの後に挿入します(行単位で削除されたのなら これは削除されたテキストをカーソルの後に挿入します(行単位で削除されたのなら
ば、カーソルのある次の行に挿入されます)。 ば、カーソルのある次の行に挿入されます)。
2. カーソルの下の文字を置き換えるには、[r](r) をタイプした後、それを置き換える 2. カーソルの下の文字を置き換えるには、r をタイプした後、それを置き換える
文字をタイプします。 文字をタイプします。
3. [変更オペレータ](c)ではカーソル位置から特定のモーションで指定される終端までを変更 3. 変更オペレータではカーソル位置から特定のモーションで指定される終端までを変更
することが可能です。例えば `ce`{normal} ならばカーソル位置から単語の終わりまで、`c$`{normal} することが可能です。例えば "ce" ならばカーソル位置から単語の終わりまで、"c$"
らば行の終わりまでを変更します。 らば行の終わりまでを変更します。
4. 変更コマンドの形式は 4. 変更コマンドの形式は
@@ -467,63 +467,63 @@ NOTE: タイプ中の間違いはバックスペースキーを使って直す
# レッスン 4.1: 位置とファイルの情報 # レッスン 4.1: 位置とファイルの情報
** ファイル内での位置とファイルの状態を表示するには `<C-g>`{normal} をタイプします。 ** ファイル内での位置とファイルの状態を表示するには "<C-g>" をタイプします。
ファイル内の{count}行に移動するには `{count}G`{normal} をタイプします。 ** ファイル内の{count}行に移動するには "{count}G" をタイプします。 **
NOTE: ステップを実行する前に、このレッスンすべてに目を通しましょう!! NOTE: ステップを実行する前に、このレッスンすべてに目を通しましょう!!
1. `<Ctrl>`{normal} を押したまま `g`{normal} を押しましょう。この操作を `<C-g>`{normal} と呼んでいます。 1. "<Ctrl>" を押したまま "g" を押しましょう。この操作を "<C-g>" と呼んでいます。
ページの一番下にファイル名と行番号が表示されるはずです。 ステップ 3 のために ページの一番下にファイル名と行番号が表示されるはずです。 ステップ 3 のために
行番号を覚えておきましょう。 行番号を覚えておきましょう。
NOTE: 画面の右下隅にカーソルの座標が既に表示されているかもしれません。 NOTE: 画面の右下隅にカーソルの座標が既に表示されているかもしれません。
これは ['ruler']('ruler') オプションを設定することで表示されます。 これは 'ruler' オプションを設定することで表示されます。
2. ファイルの最下行に移動するために [G](G) をタイプしましょう。 2. ファイルの最下行に移動するために G をタイプしましょう。
ファイルの先頭に移動するには [gg](gg) とタイプしましょう。 ファイルの先頭に移動するには gg とタイプしましょう。
3. 先ほどの行の番号をタイプし `G`{normal} をタイプしましょう。 3. 先ほどの行の番号をタイプし "G" をタイプしましょう。
最初に `<C-g>`{normal} を押した行に戻って来るはずです。 最初に "<C-g>" を押した行に戻って来るはずです。
4. 自信が持てたらステップ 1 から 3 を実行しましょう。 4. 自信が持てたらステップ 1 から 3 を実行しましょう。
# レッスン 4.2: 検索コマンド # レッスン 4.2: 検索コマンド
** 語句を検索するには `/`{normal} と、検索する語句をタイプします。 ** ** 語句を検索するには "/" と、検索する語句をタイプします。 **
1. ノーマルモードで `/`{normal} という文字をタイプします。画面一番下に `:`{normal} コマンドと同じ様 1. ノーマルモードで "/" という文字をタイプします。画面一番下に ":" コマンドと同じ様
にカーソルが現れることに気づくでしょう。 にカーソルが現れることに気づくでしょう。
2. では、'errroor' `<Enter>`{normal} とタイプしましょう。これが検索したい単語です。 2. では、'errroor' "<Enter>" とタイプしましょう。これが検索したい単語です。
3. 同じ語句をもう一度検索するときは 単に [n](n) をタイプします。 3. 同じ語句をもう一度検索するときは 単に n をタイプします。
逆方向に同じ語句を検索するときは [N](N) をタイプします。 逆方向に同じ語句を検索するときは N をタイプします。
4. 逆方向に語句を検索する場合は、`/`{normal} の代わりに [?](?) コマンドを使用します。 4. 逆方向に語句を検索する場合は、"/" の代わりに ? コマンドを使用します。
5. 元の場所に戻るには `<C-o>`{normal} (`<Ctrl>`{normal} を押し続けながら `o`{normal} をタイプ)を入力します。 5. 元の場所に戻るには "<C-o>" ("<Ctrl>" を押し続けながら "o" をタイプ)を入力します。
さらに戻るにはこれを繰り返します。`<C-i>`{normal} は前方向です。 さらに戻るにはこれを繰り返します。"<C-i>" は前方向です。
"errroor" は error とスペルが違います; errroor はいわゆる error です。 ---> "errroor" は error とスペルが違います; errroor はいわゆる error です。
NOTE: 検索がファイルの終わりに達すると、オプション ['wrapscan']('wrapscan') が設定されている場 NOTE: 検索がファイルの終わりに達すると、オプション 'wrapscan' が設定されている場
合は、ファイルの先頭から検索を続行します。 合は、ファイルの先頭から検索を続行します。
# レッスン 4.3: 対応する括弧を検索 # レッスン 4.3: 対応する括弧を検索
** 対応する ), ] や } を検索するには `%`{normal} をタイプします。 ** ** 対応する ), ] や } を検索するには "%" をタイプします。 **
1. 下の で示された行で (, [ か { のどれかにカーソルを移動しましょう。 1. 下の "--->" で示された行で (, [ か { のどれかにカーソルを移動しましょう。
2. そこで [%](%) とタイプしましょう。 2. そこで % とタイプしましょう。
3. カーソルは対応する括弧に移動するはずです。 3. カーソルは対応する括弧に移動するはずです。
4. もう一度 `%`{normal} とタイプすると元の括弧に移動します。 4. もう一度 "%" とタイプすると元の括弧に移動します。
5. 他の (, ), [, ], {, } でカーソルを移動し、`%`{normal} が何をしているか確認しましょう。 5. 他の (, ), [, ], {, } でカーソルを移動し、"%" が何をしているか確認しましょう。
This ( is a test line with ('s, ['s, ] and {'s } in it. )) ---> This ( is a test line with ('s, ['s, ] and {'s } in it. ))
NOTE: この機能は括弧が一致していないプログラムのデバッグにとても役立ちます! NOTE: この機能は括弧が一致していないプログラムのデバッグにとても役立ちます!
@@ -537,14 +537,14 @@ NOTE: この機能は括弧が一致していないプログラムのデバッ
~~~ cmd ~~~ cmd
:s/thee/the/ :s/thee/the/
~~~ ~~~
NOTE: [:s](:s) コマンドはその行で最初に見つかったものにだけ行われることに気をつけ NOTE: :s コマンドはその行で最初に見つかったものにだけ行われることに気をつけ
ましょう。 ましょう。
3. さらに、次のようにタイプします 3. さらに、次のようにタイプします
~~~ cmd ~~~ cmd
:s/thee/the/g :s/thee/the/g
~~~ ~~~
追加した g [フラグ](:s_flags)は行全体を置換することを意味します。 追加した g フラグは行全体を置換することを意味します。
この変更はその行で見つかった全ての箇所に対して行われます。 この変更はその行で見つかった全ての箇所に対して行われます。
Usually thee best time to see thee flowers is in thee spring. Usually thee best time to see thee flowers is in thee spring.
@@ -571,17 +571,17 @@ NOTE: 置き換えたいテキストをビジュアルモードで選択する
# レッスン 4 要約 # レッスン 4 要約
1. `<C-g>`{normal} はファイルでの位置とファイルの詳細を表示します。 1. "<C-g>" はファイルでの位置とファイルの詳細を表示します。
`G`{normal} はファイルの最下行に移動します。 "G" はファイルの最下行に移動します。
数値 `G`{normal} はその行に移動します。 数値 "G" はその行に移動します。
`gg`{normal} は先頭行に移動します。 "gg" は先頭行に移動します。
2. `/`{normal} の後に語句をタイプすると前方に語句を検索します。 2. "/" の後に語句をタイプすると前方に語句を検索します。
`?`{normal} の後に語句をタイプすると後方に語句を検索します。 "?" の後に語句をタイプすると後方に語句を検索します。
検索の後の `n`{normal} は同じ方向の次の検索を、`N`{normal} は逆方向の検索をします。 検索の後の "n" は同じ方向の次の検索を、"N" は逆方向の検索をします。
`<C-o>`{normal} は場所を前に移し、`<C-i>`{normal} は場所を次に移動します。 "<C-o>" は場所を前に移し、"<C-i>" は場所を次に移動します。
3. (, ), [, ], {, もしくは } の上にカーソルがある状態で `%`{normal} をタイプすると対にな 3. (, ), [, ], {, もしくは } の上にカーソルがある状態で "%" をタイプすると対にな
る文字へ移動します。 る文字へ移動します。
4. 現在行の最初の old を new に置換する。 4. 現在行の最初の old を new に置換する。
@@ -607,28 +607,28 @@ NOTE: 置き換えたいテキストをビジュアルモードで選択する
# レッスン 5.1: 外部コマンドを実行する方法 # レッスン 5.1: 外部コマンドを実行する方法
** `:!`{vim} の後に実行する外部コマンドをタイプします。 ** ** ":!" の後に実行する外部コマンドをタイプします。 **
1. 画面の最下部にカーソルが移動するよう、慣れ親しんだ `:`{normal} をタイプしましょう。 1. 画面の最下部にカーソルが移動するよう、慣れ親しんだ ":" をタイプしましょう。
これでコマンドライン命令がタイプできる様になります。 これでコマンドライン命令がタイプできる様になります。
2. ここで [!](!cmd) という文字(感嘆符)をタイプしましょう。 2. ここで ! という文字(感嘆符)をタイプしましょう。
これで外部シェルコマンドが実行できる様になります。 これで外部シェルコマンドが実行できる様になります。
3. 例として "!" に続けて "ls" とタイプし `<Enter>`{normal} を押しましょう。 3. 例として "!" に続けて "ls" とタイプし "<Enter>" を押しましょう。
シェルプロンプトのようにディレクトリの一覧が表示されるはずです。 シェルプロンプトのようにディレクトリの一覧が表示されるはずです。
NOTE: この方法によってあらゆるコマンドが実行することができます。 NOTE: この方法によってあらゆるコマンドが実行することができます。
もちろん引数も与えられます。 もちろん引数も与えられます。
NOTE: 全ての `:`{vim} コマンドは `<Enter>`{normal} を押して実行しなければなりません。 NOTE: 全ての ":" コマンドは "<Enter>" を押して実行しなければなりません。
# レッスン 5.2: その他のファイルへ書き込み # レッスン 5.2: その他のファイルへ書き込み
** ファイルへ変更を保存するには `:w`{vim} ファイル名 とタイプします。 ** ** ファイルへ変更を保存するには ":w" ファイル名 とタイプします。 **
1. ディレクトリの一覧を得るために `:!ls`{vim} とタイプしましょう。 1. ディレクトリの一覧を得るために ":!ls" とタイプしましょう。
このあと `<Enter>`{normal} を押すのは既にご存知ですね。 このあと "<Enter>" を押すのは既にご存知ですね。
2. TEST のように、そのディレクトリに無いファイル名を一つ選びます。 2. TEST のように、そのディレクトリに無いファイル名を一つ選びます。
@@ -639,7 +639,7 @@ NOTE: 全ての `:`{vim} コマンドは `<Enter>`{normal} を押して実行し
(TEST は、選んだファイル名です。) (TEST は、選んだファイル名です。)
4. これによりファイル全体が TEST という名前で保存されます。 4. これによりファイル全体が TEST という名前で保存されます。
もう一度 `:!ls`{vim} とタイプしてディレクトリを確認してみましょう。 もう一度 ":!ls" とタイプしてディレクトリを確認してみましょう。
NOTE: ここで Neovim を終了し、`nvim TEST` で起動すると、保存した時の NOTE: ここで Neovim を終了し、`nvim TEST` で起動すると、保存した時の
チュートリアルの複製ができ上がるはずです。 チュートリアルの複製ができ上がるはずです。
@@ -650,50 +650,50 @@ NOTE: ここで Neovim を終了し、`nvim TEST` で起動すると、保存し
~~~ ~~~
# レッスン 5.3: 選択した書き込み # レッスン 5.3: 選択した書き込み
** ファイルの一部を保存するには `v`{normal} モーションと `:w ファイル名`{vim} をタイプします。 ** ** ファイルの一部を保存するには "v" モーションと ":w ファイル名" をタイプします。 **
1. この行にカーソルを移動します。 1. この行にカーソルを移動します。
2. [v](v) を押し、以下の第5項目にカーソルを移動します。 2. v を押し、以下の第5項目にカーソルを移動します。
テキストが強調表示されるのに注目して下さい。 テキストが強調表示されるのに注目して下さい。
3. 文字 `:`{normal} を押すと、画面の最下部に 3. 文字 ":" を押すと、画面の最下部に
`:'<,'>`{vim} ":'<,'>"
が現れます。 が現れます。
4. 次のようにタイプします。 4. 次のようにタイプします。
`w TEST`{vim} "w TEST"
TEST は存在しないファイル名です。`<Enter>`{normal} を押す前に TEST は存在しないファイル名です。"<Enter>" を押す前に
`:'<,'>w TEST`{vim} ":'<,'>w TEST"
となっていることを確認して下さい。 となっていることを確認して下さい。
5. Vim は TEST というファイルに選択された行を書き込むでしょう。 5. Vim は TEST というファイルに選択された行を書き込むでしょう。
:`:!ls`{vim} でそれを確認します。 :":!ls" でそれを確認します。
それは削除しないでおいて下さい。次のレッスンで使用します。 それは削除しないでおいて下さい。次のレッスンで使用します。
NOTE: [v](v) を押すと、[ビジュアル(Visual)選択](visual-mode)が始まります。カーソルを動かすことで、 NOTE: v を押すと、ビジュアル(Visual)選択が始まります。カーソルを動かすことで、
選択範囲を大きくも小さくもできます。さらに、その選択範囲に対してオペレータ 選択範囲を大きくも小さくもできます。さらに、その選択範囲に対してオペレータ
を適用できます。例えば `d`{normal} はテキストを削除します。 を適用できます。例えば "d" はテキストを削除します。
# レッスン 5.4: ファイルの取込と合併 # レッスン 5.4: ファイルの取込と合併
** ファイルの中身を挿入するには `:r ファイル名`{vim} とタイプします。 ** ** ファイルの中身を挿入するには ":r ファイル名" とタイプします。 **
1. カーソルをこの行のすぐ上に合わせます。 1. カーソルをこの行のすぐ上に合わせます。
NOTE: ステップ 2 の実行後、ここにレッスン 5.3 のテキストが現れます。 NOTE: ステップ 2 の実行後、ここにレッスン 5.3 のテキストが現れます。
下に下がってこのレッスンに移動しましょう。レッスンが終わったら `u`{normal} を押して 下に下がってこのレッスンに移動しましょう。レッスンが終わったら "u" を押して
変更を取り消してください。 変更を取り消してください。
2. では TEST というファイルを 次のコマンドで読み込みます。 2. では TEST というファイルを 次のコマンドで読み込みます。
`:r TEST`{vim} ":r TEST"
ここでいう TEST は使うファイルの名前のことです。 ここでいう TEST は使うファイルの名前のことです。
読み込まれたファイルは、カーソル行の下にあります。 読み込まれたファイルは、カーソル行の下にあります。
@@ -703,75 +703,75 @@ NOTE: ステップ 2 の実行後、ここにレッスン 5.3 のテキストが
NOTE: 外部コマンドの出力を読み込むこともできます。例えば、 NOTE: 外部コマンドの出力を読み込むこともできます。例えば、
`:r !ls`{vim} ":r !ls"
は `ls` コマンドの出力をカーソル以下に読み込みます。 は `ls` コマンドの出力をカーソル以下に読み込みます。
# レッスン 5 要約 # レッスン 5 要約
1. [:!command](:!cmd) によって、外部コマンドを実行する。 1. :!command によって、外部コマンドを実行する。
よく使う例: よく使う例:
`:!ls `{vim} - ディレクトリ内の一覧を見る。 ":!ls " - ディレクトリ内の一覧を見る。
`:!rm ファイル名`{vim} - ファイルを削除する。 ":!rm ファイル名" - ファイルを削除する。
2. [:w](:w) ファイル名 ファイル名 によってファイル名というファイルがディスクに書 2. :w ファイル名 ファイル名 によってファイル名というファイルがディスクに書
き込まれる。 き込まれる。
3. [v](v) モーション で :w ファイル名 とすると、ビジュアル選択行がファイルに保存 3. v モーション で :w ファイル名 とすると、ビジュアル選択行がファイルに保存
される。 される。
4. [:r](:r) ファイル名 によりファイル名というファイルがディスクより取り込まれ、 4. :r ファイル名 によりファイル名というファイルがディスクより取り込まれ、
カーソル位置の下に挿入される。 カーソル位置の下に挿入される。
5. [:r !ls](:r!) は ls コマンドの出力をカーソル位置以下に読み込む。 5. :r !ls は ls コマンドの出力をカーソル位置以下に読み込む。
# レッスン 6.1: オープンコマンド # レッスン 6.1: オープンコマンド
** `o`{normal} をタイプすると、カーソルの下の行が開き(Open)、挿入モードに入ります。 ** ** "o" をタイプすると、カーソルの下の行が開き(Open)、挿入モードに入ります。 **
1. 以下の と示された最初の行にカーソルを移動しましょう。 1. 以下の "--->" と示された最初の行にカーソルを移動しましょう。
2. `o`{normal} (小文字) をタイプして、カーソルの下の行を[開き](o)、挿入モードに入ります。 2. "o" (小文字) をタイプして、カーソルの下の行を開き、挿入モードに入ります。
3. いくつか文字をタイプしてから、挿入モードを終了する為に `<Esc>`{normal} を入力します。 3. いくつか文字をタイプしてから、挿入モードを終了する為に "<Esc>" を入力します。
その後、追加した行を削除してください。 その後、追加した行を削除してください。
`o`{normal} をタイプするとカーソルは開いた行へ移動し挿入モードに入ります。 ---> "o" をタイプするとカーソルは開いた行へ移動し挿入モードに入ります。
4. カーソルの上の行に挿入するには、小文字の `o`{normal} ではなく、[大文字の O](O) をタイプしま 4. カーソルの上の行に挿入するには、小文字の "o" ではなく、大文字の O をタイプしま
す。次の行で試してみましょう。試し終わったら追加した行を削除してください。 す。次の行で試してみましょう。試し終わったら追加した行を削除してください。
この行の上へ挿入するには、この行へカーソルを置いて `O`{normal} をタイプします。 ---> この行の上へ挿入するには、この行へカーソルを置いて "O" をタイプします。
# レッスン 6.2: 追加コマンド # レッスン 6.2: 追加コマンド
** カーソルの次の位置からテキストを追加(Append)するには `a`{normal} とタイプします。 ** ** カーソルの次の位置からテキストを追加(Append)するには "a" とタイプします。 **
1. カーソルを ✗ で示された最初の行へ移動しましょう。 1. カーソルを ✗ で示された最初の行へ移動しましょう。
2. `e`{normal} を押して "li" の終端部までカーソルを移動します。 2. "e" を押して "li" の終端部までカーソルを移動します。
3. カーソルの後ろにテキストを[追加](a)するために `a`{normal} (小文字) をタイプします。 3. カーソルの後ろにテキストを追加するために "a" (小文字) をタイプします。
4. 下の行のように単語を完成させます。挿入モードを抜ける為に `<Esc>`{normal} を押します。 4. 下の行のように単語を完成させます。挿入モードを抜ける為に "<Esc>" を押します。
5. `e`{normal} を使って次の不完全な単語へ移動し、ステップ 3 と 4 を繰り返します。 5. "e" を使って次の不完全な単語へ移動し、ステップ 3 と 4 を繰り返します。
This li will allow you to pract appendi text to a line. This li will allow you to pract appendi text to a line.
This line will allow you to practice appending text to a line. This line will allow you to practice appending text to a line.
NOTE: [a](a), [i](i) と [A](A) は同じ挿入モードへ移りますが、文字が挿入される位置は異なります。 NOTE: a, i と A は同じ挿入モードへ移りますが、文字が挿入される位置は異なります。
# レッスン 6.3: その他の置換方法 # レッスン 6.3: その他の置換方法
** 1文字以上を置き換える(Replace)には大文字の `R`{normal} とタイプしましょう。 ** ** 1文字以上を置き換える(Replace)には大文字の "R" とタイプしましょう。 **
1. 以下の ✗ と示された行にある、最初の "xxx" の先頭にカーソルを移動します。 1. 以下の ✗ と示された行にある、最初の "xxx" の先頭にカーソルを移動します。
2. `R`{normal} ([大文字 R](R)) を押して、2行目の数値をタイプすることで、"xxx" が置換されます。 2. "R" (大文字 R) を押して、2行目の数値をタイプすることで、"xxx" が置換されます。
3. 置換モードを抜けるには `<Esc>`{normal} を押します。行の残りが変更されていないままにな 3. 置換モードを抜けるには "<Esc>" を押します。行の残りが変更されていないままにな
ることに注意してください。 ることに注意してください。
4. 残った "xxx" をステップを繰り返して置換しましょう。 4. 残った "xxx" をステップを繰り返して置換しましょう。
@@ -784,30 +784,30 @@ NOTE: 置換モードは挿入モードに似ていますが、全てのタイ
# レッスン 6.4: テキストのコピーとペースト # レッスン 6.4: テキストのコピーとペースト
** テキストのコピー(Yank)にはオペレータ `y`{normal} を、ペーストには `p`{normal} を使います。 ** ** テキストのコピー(Yank)にはオペレータ "y" を、ペーストには "p" を使います。 **
1. と示された行へ移動し、カーソルを "a)" の後に置いておきます。 1. "--->" と示された行へ移動し、カーソルを "a)" の後に置いておきます。
2. `v`{normal} でビジュアルモードを開始し、"first" の手前までカーソルを移動します。 2. "v" でビジュアルモードを開始し、"first" の手前までカーソルを移動します。
3. `y`{normal} をタイプして強調表示されたテキストを [yank](yank) (コピー)します。 3. "y" をタイプして強調表示されたテキストを yank (コピー)します。
4. 次の行の行末までカーソルを移動します: `j$`{normal} 4. 次の行の行末までカーソルを移動します: "j$"
5. `p`{normal} を押してテキストを貼り付け([put](put))ます。 5. "p" を押してテキストを貼り付け(put)ます。
6. `a`{normal} を押してから、 "second" とタイプします。その後、`<Esc>`{normal} を押して挿入モードを 6. "a" を押してから、 "second" とタイプします。その後、"<Esc>" を押して挿入モードを
終了します。 終了します。
7. ビジュアルモードで "item." を選択、`y`{normal} で yank、次の行の行末まで `j$`{normal} で移動 7. ビジュアルモードで "item." を選択、"y" で yank、次の行の行末まで "j$" で移動
し、 `p`{normal} でテキストをそこに put します。 し、 "p" でテキストをそこに put します。
a) This is the first item. a) This is the first item.
b) b)
NOTE: `y`{normal} をオペレータとして使うこともできます。`yw`{normal} は単語を1つ yank します。 NOTE: "y" をオペレータとして使うこともできます。"yw" は単語を1つ yank します。
NOTE: `P`{normal} を使用するとカーソルの後ではなく前に put できます。 NOTE: "P" を使用するとカーソルの後ではなく前に put できます。
# レッスン 6.5: オプションの設定 # レッスン 6.5: オプションの設定
@@ -816,13 +816,13 @@ NOTE: `P`{normal} を使用するとカーソルの後ではなく前に put で
Neovim にはあなたの必要に応じて設定できる、様々なオプションが用意されています。 Neovim にはあなたの必要に応じて設定できる、様々なオプションが用意されています。
1. 次の様に入力して 'ignore' を検索しましょう: `/ignore` 1. 次の様に入力して 'ignore' を検索しましょう: `/ignore`
`n`{normal} を押して何度か検索を繰り返します。 "n" を押して何度か検索を繰り返します。
2. 次の様に入力して 'ic' (Ignore Case の略) オプションを設定します: 2. 次の様に入力して 'ic' (Ignore Case の略) オプションを設定します:
~~~ cmd ~~~ cmd
:set ic :set ic
~~~ ~~~
3. では `n`{normal} によってもう1度 'ignore' を検索します。 3. では "n" によってもう1度 'ignore' を検索します。
"Ignore" や "IGNORE" も見つけられることに気づくでしょう。 "Ignore" や "IGNORE" も見つけられることに気づくでしょう。
4. 'hlsearch' と 'incsearch' オプションを設定しましょう: 4. 'hlsearch' と 'incsearch' オプションを設定しましょう:
@@ -843,24 +843,24 @@ NOTE: 検索結果の強調表示をやめるには次の様に入力します:
~~~ cmd ~~~ cmd
:nohlsearch :nohlsearch
~~~ ~~~
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、語句内で [\c](/\c) を使 NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、語句内で \c を使
用します: /ignore\c <Enter> 用します: /ignore\c <Enter>
# レッスン 6 要約 # レッスン 6 要約
1. `o`{normal} をタイプするとカーソルの下の行を開けて、そこで挿入モードになる。 1. "o" をタイプするとカーソルの下の行を開けて、そこで挿入モードになる。
`O`{normal} をタイプするとカーソルの上の行で挿入モードになる。 "O" をタイプするとカーソルの上の行で挿入モードになる。
2. カーソル上の文字の次からテキストを追加するには `a`{normal} とタイプする。 2. カーソル上の文字の次からテキストを追加するには "a" とタイプする。
行末にテキストを挿入するには `A`{normal} をタイプする。 行末にテキストを挿入するには "A" をタイプする。
3. `e`{normal} コマンドは単語の終端にカーソルを移動する。 3. "e" コマンドは単語の終端にカーソルを移動する。
4. `y`{normal} オペレータはテキストを yank (コピー)し、`p`{normal} はそれを put (ペースト)する。 4. "y" オペレータはテキストを yank (コピー)し、"p" はそれを put (ペースト)する。
5. 大文字の `R`{normal} をタイプすると置換モードに入り、`<Esc>`{normal} を押すと抜ける。 5. 大文字の "R" をタイプすると置換モードに入り、"<Esc>" を押すと抜ける。
6. "[:set](:set) xxx" とタイプするとオプション "xxx" が設定される。 6. ":set xxx" とタイプするとオプション "xxx" が設定される。
'ic' 'ignorecase' 検索時に大文字小文字の区別しない 'ic' 'ignorecase' 検索時に大文字小文字の区別しない
'is' 'incsearch' 検索フレーズに部分マッチしている部分を表示する 'is' 'incsearch' 検索フレーズに部分マッチしている部分を表示する
@@ -884,15 +884,15 @@ Neovim には広範にわたるオンラインヘルプシステムがありま
ヘルプを開始するには、次の内どれか1つを試してみましょう: ヘルプを開始するには、次の内どれか1つを試してみましょう:
- `<F1>`{normal} キーを押す(もしあるならば)。 - "<F1>" キーを押す(もしあるならば)。
- `:help`{vim} とタイプする。 - ":help" とタイプする。
ヘルプウィンドウのテキストを読むと、ヘルプの動作が理解できます。 ヘルプウィンドウのテキストを読むと、ヘルプの動作が理解できます。
`<C-w><C-w>`{normal} とタイプすると ヘルプウィンドウへジャンプします。 "<C-w><C-w>" とタイプすると ヘルプウィンドウへジャンプします。
`:q`{vim} とタイプすると ヘルプウィンドウを閉じられます。 ":q" とタイプすると ヘルプウィンドウを閉じられます。
":help" コマンドに引数を与えることにより、あらゆる題名のヘルプを見つけることがで ":help" コマンドに引数を与えることにより、あらゆる題名のヘルプを見つけることがで
きます。これらを試してみましょう(`<Enter>`{normal} をタイプし忘れないように): きます。これらを試してみましょう("<Enter>" をタイプし忘れないように):
~~~ cmd ~~~ cmd
:help w :help w
:help c_CTRL-D :help c_CTRL-D
@@ -901,29 +901,29 @@ Neovim には広範にわたるオンラインヘルプシステムがありま
~~~ ~~~
# レッスン 7.2: 補完 # レッスン 7.2: 補完
** `<C-d>`{normal}`<Tab>`{normal} でコマンドラインを補完する ** ** "<C-d>""<Tab>" でコマンドラインを補完する **
1. 現在のディレクトリに在るものを表示します: `:!ls`{vim} 1. 現在のディレクトリに在るものを表示します: ":!ls"
2. コマンドの先頭をタイプします: `:e`{vim} 2. コマンドの先頭をタイプします: ":e"
3. `<C-d>`{normal} を押すと Neovim は "e" から始まるコマンドの一覧を表示します。 3. "<C-d>" を押すと Neovim は "e" から始まるコマンドの一覧を表示します。
4. `<Tab>`{normal} を押すと、Neovim は可能な補完候補のメニューを表示します 4. "<Tab>" を押すと、Neovim は可能な補完候補のメニューを表示します
(または、ただの一つのマッチがあるときは、補完します。 (または、ただの一つのマッチがあるときは、補完します。
例: ":ed`<Tab>`{normal}" は ":edit" に補完されます)。 例: ":ed"<Tab>"" は ":edit" に補完されます)。
5. 次のマッチに移動するには `<Tab>`{normal} または `<C-n>`{normal} を使用し、 5. 次のマッチに移動するには "<Tab>" または "<C-n>" を使用し、
前のマッチに移動するには `<S-Tab>`{normal} または `<C-p>`{normal} を使用します。 前のマッチに移動するには "<S-Tab>" または "<C-p>" を使用します。
6. `edit`{vim} を選択すると、コマンドラインに `edit`{vim} が挿入されます。 6. "edit" を選択すると、コマンドラインに "edit" が挿入されます。
7. さらに空白と、既存のファイル名の始まりを加えます: `:edit FIL`{vim} 7. さらに空白と、既存のファイル名の始まりを加えます: ":edit FIL"
8. `<Tab>`{normal}を押すと、Vim は `FIL` で始まるファイル名の候補リストを含む補完メニューを 8. "<Tab>"を押すと、Vim は `FIL` で始まるファイル名の候補リストを含む補完メニューを
表示します。 表示します。
NOTE: 補完は多くのコマンドで動作します。特に `:help`{vim} の際に役立ちます。 NOTE: 補完は多くのコマンドで動作します。特に ":help" の際に役立ちます。
# レッスン 7.3: 設定ファイルの作成 # レッスン 7.3: 設定ファイルの作成
@@ -934,43 +934,43 @@ Neovim はとても自由度の高いエディタです。あなたの思うが
1. `"init.lua"` ファイルを編集します。 1. `"init.lua"` ファイルを編集します。
`:exe 'edit' stdpath('config')..'/init.lua'`{vim} ":exe 'edit' stdpath('config')..'/init.lua'"
2. Lua 用の設定例を "init.lua" にコピーします。 2. Lua 用の設定例を "init.lua" にコピーします。
`:read $VIMRUNTIME/example_init.lua`{vim} ":read $VIMRUNTIME/example_init.lua"
3. ファイルを書き込みます(必要に応じて親ディレクトリも作成されます): 3. ファイルを書き込みます(必要に応じて親ディレクトリも作成されます):
`:w ++p`{vim} ":w ++p"
4. 次に Neovim を起動した時、以下のコマンドでこの設定ファイルを開けます: 4. 次に Neovim を起動した時、以下のコマンドでこの設定ファイルを開けます:
`:e $MYVIMRC`{vim} ":e $MYVIMRC"
# レッスン 7 要約 # レッスン 7 要約
1. ヘルプウィンドウを開くには `:help`{vim} とするか `<F1>`{normal} を押す。 1. ヘルプウィンドウを開くには ":help" とするか "<F1>" を押す。
2. '知りたい事' のヘルプを検索するには `:help '知りたい事'`{vim} とタイプする。 2. '知りたい事' のヘルプを検索するには ":help '知りたい事'" とタイプする。
3. 別のウィンドウへジャンプするには `<C-w><C-w>`{normal} とタイプする。 3. 別のウィンドウへジャンプするには "<C-w><C-w>" とタイプする。
4. ヘルプウィンドウを閉じるには `:q`{vim} とタイプする。 4. ヘルプウィンドウを閉じるには ":q" とタイプする。
5. コマンドラインモードで可能な補完を見るには `<C-d>`{normal} をタイプする。 5. コマンドラインモードで可能な補完を見るには "<C-d>" をタイプする。
補完を使用するには `<Tab>`{normal} を押す。 補完を使用するには "<Tab>" を押す。
6. お好みの設定を保つには設定ファイルを作成する。作成した設定ファイルは 6. お好みの設定を保つには設定ファイルを作成する。作成した設定ファイルは
`:e $MYVIMRC`{vim} でいつでも開き直せます。 ":e $MYVIMRC" でいつでも開き直せます。
# 次はなに? # 次はなに?
`:help nvim-quickstart`{vim} を実行すると Nvim を拡張する為の更なる情報を確認できます。 ":help nvim-quickstart" を実行すると Nvim を拡張する為の更なる情報を確認できます。
# おわりに # おわりに
これにて Neovim チュートリアルの チャプター 1 は終わりです。是非 [チャプター 2](@tutor:vim-02-beginner) これにて Neovim チュートリアルの チャプター 1 は終わりです。是非 チャプター 2 に
挑戦してみてください。 挑戦してみてください。
このチュートリアルでは、エディタを簡単に、しかも充分に使うことができるようにと、 このチュートリアルでは、エディタを簡単に、しかも充分に使うことができるようにと、

View File

@@ -9,7 +9,6 @@
"151": "ここ にも 間違った テキスト が あります。", "151": "ここ にも 間違った テキスト が あります。",
"219": "この 文 には いくつか 必要のない 単語 が 含まれて います。", "219": "この 文 には いくつか 必要のない 単語 が 含まれて います。",
"235": "誰かがこの行の最後を2度タイプしました。", "235": "誰かがこの行の最後を2度タイプしました。",
"274": -1,
"293": "この行の単語は綺麗になった。", "293": "この行の単語は綺麗になった。",
"310": "1) 薔薇は赤く", "310": "1) 薔薇は赤く",
"311": "", "311": "",
@@ -25,11 +24,7 @@
"424": "This line has a few words that need changing using the change operator.", "424": "This line has a few words that need changing using the change operator.",
"444": "The end of this line needs to be corrected using the c$ command.", "444": "The end of this line needs to be corrected using the c$ command.",
"445": "The end of this line needs to be corrected using the c$ command.", "445": "The end of this line needs to be corrected using the c$ command.",
"507": -1,
"526": -1,
"550": "Usually the best time to see the flowers is in the spring.", "550": "Usually the best time to see the flowers is in the spring.",
"740": -1,
"745": -1,
"761": "This line will allow you to practice appending text to a line.", "761": "This line will allow you to practice appending text to a line.",
"762": "This line will allow you to practice appending text to a line.", "762": "This line will allow you to practice appending text to a line.",
"779": "Adding 123 to 456 gives you 579.", "779": "Adding 123 to 456 gives you 579.",

View File

@@ -8,7 +8,7 @@
~~~ cmd ~~~ cmd
:Tutor vim-01-beginner :Tutor vim-01-beginner
~~~ ~~~
または、[チャプター 1](@tutor:vim-01-beginner) をクリックしてください。 または、チャプター 1 をクリックしてください。
このチャプターを完了するのに必要な時間は、練習にどれだけ時間をかけるかによりま このチャプターを完了するのに必要な時間は、練習にどれだけ時間をかけるかによりま
すが、おおよそ 8~10 分です。 すが、おおよそ 8~10 分です。
@@ -19,32 +19,32 @@
** Store two yanked words concurrently and then paste them ** ** Store two yanked words concurrently and then paste them **
** ヤンクした二つの単語を同時に保存し、それらをペーストします ** ** ヤンクした二つの単語を同時に保存し、それらをペーストします **
1. 以下の と示された行にカーソルを移動します。 1. 以下の "--->" と示された行にカーソルを移動します。
2. 単語 'Edward' の上に移動した後、`"ayiw`{normal} とタイプします。 2. 単語 'Edward' の上に移動した後、""ayiw" とタイプします。
**覚え方**: *into register(") named (a) (y)ank (i)nner (w)ord* **覚え方**: *into register(") named (a) (y)ank (i)nner (w)ord*
*( レジスタに aという名の ヤンク 内側 単語 )* *( レジスタに aという名の ヤンク 内側 単語 )*
3. 単語 'cookie' に移動(`fk`{normal}, `2fc`{normal}, `$2b`{normal}`/co`{normal} `<ENTER>`{normal})し、`"byiw`{normal} とタイプします。 3. 単語 'cookie' に移動("fk", "2fc", "$2b""/co <ENTER>")し、""byiw" とタイプします。
4. 単語 'Vince' の上に移動した後、`ciw<CTRL-r>a<ESC>`{normal} とタイプします。 4. 単語 'Vince' の上に移動した後、"ciw<CTRL-r>a<ESC>" とタイプします。
**覚え方**: *(c)hange (i)nner (w)ord with <contents of (r)egister> named (a)* **覚え方**: *(c)hange (i)nner (w)ord with <contents of (r)egister> named (a)*
*( 変更 内側 単語 で <レジスタの内容> aという名の )* *( 変更 内側 単語 で <レジスタの内容> aという名の )*
5. 単語 'cake' の上に移動した後、`ciw<CTRL-r>b<ESC>`{normal} とタイプします。 5. 単語 'cake' の上に移動した後、"ciw<CTRL-r>b<ESC>" とタイプします。
a) Edward will henceforth be in charge of the cookie rations ---> a) Edward will henceforth be in charge of the cookie rations
b) In this capacity, Vince will have sole cake discretionary powers b) In this capacity, Vince will have sole cake discretionary powers
NOTE: 削除した文字列もレジスタに格納されます。例えば `"sdiw`{normal} はカーソル下の単語を NOTE: 削除した文字列もレジスタに格納されます。例えば ""sdiw" はカーソル下の単語を
削除し、レジスタ s に格納します。 削除し、レジスタ s に格納します。
REFERENCE: [レジスタ](registers) REFERENCE: レジスタ
[名前付きレジスタ](quotea) 名前付きレジスタ
[モーション](text-objects) モーション
[CTRL-R](i_CTRL-R) CTRL-R
# レッスン 2.1.2: EXPRESSION レジスタ # レッスン 2.1.2: EXPRESSION レジスタ
@@ -55,42 +55,42 @@ REFERENCE: [レジスタ](registers)
2. 行内の数字の上に移動します。 2. 行内の数字の上に移動します。
3. 次のようにタイプします: `ciw<CTRL-r>=`{normal}60\*60\*24 `<ENTER>`{normal} 3. 次のようにタイプします: "ciw<CTRL-r>="60\*60\*24 "<ENTER>"
4. 次の行の末尾で挿入モードに入り、以下をタイプして今日の日付を追加します: 4. 次の行の末尾で挿入モードに入り、以下をタイプして今日の日付を追加します:
`<CTRL-r>=`{normal}`system('date')`{vim} `<ENTER>`{normal} "<CTRL-r>=""system('date') <ENTER>"
NOTE: すべてのシステムコールは OS 依存です。例えば Windows では以下を使います: NOTE: すべてのシステムコールは OS 依存です。例えば Windows では以下を使います:
`system('date /t')`{vim} または `:r!date /t`{vim} "system('date /t')" または ":r!date /t"
一日って何秒だっけ、 84600 秒かな? 一日って何秒だっけ、 84600 秒かな?
本日の日付は: ---> 本日の日付は:
NOTE: 日付を入力するには、`:pu=`{normal}`system('date')`{vim} や、よりキーストロークの少ない NOTE: 日付を入力するには、":pu=""system('date')" や、よりキーストロークの少ない
`:r!date`{vim} でも可能です。 ":r!date" でも可能です。
REFERENCE: [Expression レジスタ](quote=) REFERENCE: Expression レジスタ
# レッスン 2.1.3: 番号付きレジスタ # レッスン 2.1.3: 番号付きレジスタ
** `yy`{normal}`dd`{normal} のレジスタに対する効果を確認する ** ** "yy""dd" のレジスタに対する効果を確認する **
1. と示された行にカーソルを移動します。 1. "--->" と示された行にカーソルを移動します。
2. 0番目の行をヤンクした後、`:reg`{vim} '<ENTER>'{normal} でレジスタを調べます。 2. 0番目の行をヤンクした後、":reg" '<ENTER>'{normal} でレジスタを調べます。
3. `"cdd`{normal} で 0番目の行を削除して、再度レジスタを確認します。 3. ""cdd" で 0番目の行を削除して、再度レジスタを確認します。
(0番目の行はどこにあると思いますか?) (0番目の行はどこにあると思いますか?)
4. 残りの行もそれぞれ削除しつつ、その都度 `:reg`{vim} 確認します。 4. 残りの行もそれぞれ削除しつつ、その都度 ":reg" 確認します。
NOTE: 新たに削除された項目が追加される度に、古い項目がリストの下に移動しているこ NOTE: 新たに削除された項目が追加される度に、古い項目がリストの下に移動しているこ
とに気づきましたか? とに気づきましたか?
5. 次の順番でレジスタをペーストします: c, 7, 4, 8, 2。例: `"7p`{normal} 5. 次の順番でレジスタをペーストします: c, 7, 4, 8, 2。例: ""7p"
0. ねがわくは ---> 0. ねがわくは
9. おちゃめな 9. おちゃめな
8. ゔぃまーと 8. ゔぃまーと
7. いつまでも 7. いつまでも
@@ -101,10 +101,10 @@ NOTE: 新たに削除された項目が追加される度に、古い項目が
2. ならんことを 2. ならんことを
1. します 1. します
NOTE: 行全体削除(`dd`{normal})は行全体ヤンクや一行以下の小さな削除に比べて、長期間番号付き NOTE: 行全体削除("dd")は行全体ヤンクや一行以下の小さな削除に比べて、長期間番号付き
レジスタに保存されます。 レジスタに保存されます。
REFERENCE: [番号付きレジスタ](quote0) REFERENCE: 番号付きレジスタ
# レッスン 2.1.4: マークの美 # レッスン 2.1.4: マークの美
@@ -112,30 +112,30 @@ REFERENCE: [番号付きレジスタ](quote0)
** Code monkey arithmetic avoidance ** ** Code monkey arithmetic avoidance **
NOTE: 大きなコードの塊を動かすことはコーディングにおける面倒事の一つです。例えば NOTE: 大きなコードの塊を動かすことはコーディングにおける面倒事の一つです。例えば
`"a147d`{normal}`:945,1091d a`{vim} 、さらには `i<CTRL-r>=`{normal}1091-945 `<ENTER>`{normal} のような、コ ""a147d"":945,1091d a" 、さらには "i<CTRL-r>="1091-945 "<ENTER>" のような、コ
ード操作の為に行数の計算をするような事を避ける為のテクニックを紹介します。 ード操作の為に行数の計算をするような事を避ける為のテクニックを紹介します。
1. と示された行にカーソルを移動します。 1. "--->" と示された行にカーソルを移動します。
2. 関数の最初の行に移動して `ma`{normal} でマークします。 2. 関数の最初の行に移動して "ma" でマークします。
NOTE: 行内におけるカーソル位置は重要ではありません! NOTE: 行内におけるカーソル位置は重要ではありません!
3. `$%`{normal} で行末からさらにコードブロックの末尾に移動します。 3. "$%" で行末からさらにコードブロックの末尾に移動します。
4. `"ad'a`{normal} でコードブロックを削除しレジスタ a に格納します。 4. ""ad'a" でコードブロックを削除しレジスタ a に格納します。
**覚え方**: *into register(") named (a) put the (d)eletion from the cursor to **覚え方**: *into register(") named (a) put the (d)eletion from the cursor to
the LINE containing mark(') (a)* the LINE containing mark(') (a)*
*( レジスタに a という名の 格納 削除を カーソルから *( レジスタに a という名の 格納 削除を カーソルから
マーク a を含む行までの )* マーク a を含む行までの )*
5. `"ap`{normal} でコードブロックを BBB と CCC の間にペーストします。 5. ""ap" でコードブロックを BBB と CCC の間にペーストします。
NOTE: `ma$%"ad'a`{normal} という操作に慣れるまで何度も練習しましょう。 NOTE: "ma$%"ad'a" という操作に慣れるまで何度も練習しましょう。
~~~ cmd ~~~ cmd
AAA ---> AAA
function itGotRealBigRealFast() { function itGotRealBigRealFast() {
if ( somethingIsTrue ) { if ( somethingIsTrue ) {
doIt() doIt()
@@ -154,30 +154,30 @@ CCC
NOTE: レジスタとマークは名前空間を共有しません。したがってレジスタ a と マーク a NOTE: レジスタとマークは名前空間を共有しません。したがってレジスタ a と マーク a
は完全に独立しています。レジスタとマクロの場合、これは該当しません。 は完全に独立しています。レジスタとマクロの場合、これは該当しません。
REFERENCE: [マーク](marks) REFERENCE: マーク
[マークにおけるモーション](mark-motions) (' と \` の違いについて) マークにおけるモーション (' と \` の違いについて)
# レッスン 2.1 要約 # レッスン 2.1 要約
1. テキストを格納(ヤンク、削除)したり、取り出し(ペースト)できるレジスタが計26 1. テキストを格納(ヤンク、削除)したり、取り出し(ペースト)できるレジスタが計26
個(a-z)存在する。 個(a-z)存在する。
2. 単語全体をヤンクするには単語内の任意の位置で: `yiw`{normal} 2. 単語全体をヤンクするには単語内の任意の位置で: "yiw"
3. 単語全体を変更するには単語内の任意の位置で: `ciw`{normal} 3. 単語全体を変更するには単語内の任意の位置で: "ciw"
4. 挿入モードでレジスタから直接テキストを挿入するには: `<CTRL-r>a`{normal} 4. 挿入モードでレジスタから直接テキストを挿入するには: "<CTRL-r>a"
5. 単純な算術計算の結果を挿入するには、挿入モードで次のタイプ: 5. 単純な算術計算の結果を挿入するには、挿入モードで次のタイプ:
`<CTRL-r>=`{normal}60\*60 `<ENTER>`{normal} "<CTRL-r>="60\*60 "<ENTER>"
6. システムコールの結果を挿入するには、挿入モードで次をタイプ: 6. システムコールの結果を挿入するには、挿入モードで次をタイプ:
`<CTRL-r>=`{normal}`system('ls -1')`{vim} "<CTRL-r>=""system('ls -1')"
7. レジスタを確認するには: `:reg`{vim} 7. レジスタを確認するには: ":reg"
8. `dd`{normal} は 1 - 9 で降順の番号レジスタに格納される。行全体削除は他の操作より長期 8. "dd" は 1 - 9 で降順の番号レジスタに格納される。行全体削除は他の操作より長期
間番号付きレジスタに保持される。 間番号付きレジスタに保持される。
9. 番号付きレジスタにおいて、ヤンクされた内容は短時間で破棄される。 9. 番号付きレジスタにおいて、ヤンクされた内容は短時間で破棄される。
10. コマンドモードでマークを設定するには: `m[a-zA-Z0-9]`{normal} 10. コマンドモードでマークを設定するには: "m[a-zA-Z0-9]"
11. マークへ行単位で移動するには `'`{normal} 11. マークへ行単位で移動するには "'"
# おわりに # おわりに

View File

@@ -1,10 +1,6 @@
{ {
"expect": { "expect": {
"38": -1,
"39": "b) In this capacity, Edward will have sole cookie discretionary powers", "39": "b) In this capacity, Edward will have sole cookie discretionary powers",
"66": "一日って何秒だっけ、 86400 秒かな?", "66": "一日って何秒だっけ、 86400 秒かな?"
"67": -1,
"93": -1,
"138": -1
} }
} }

View File

@@ -225,14 +225,12 @@ These elements are specified in separate JSON files like this
"expect": { "expect": {
"1": "This is how this line should look.", "1": "This is how this line should look.",
"2": "This is how this line should look.", "2": "This is how this line should look.",
"3": -1
} }
} }
~~~ ~~~
These files contain an "expect" dictionary, for which the keys are line numbers and These files contain an "expect" dictionary, for which the keys are line numbers and
the values are the expected text. A value of -1 means that the condition for the line the values are the expected text.
will always be satisfied, no matter what (this is useful for letting the user play a bit).
This is an "expect" line that is always satisfied. Try changing it. This is an "expect" line that is always satisfied. Try changing it.

View File

@@ -8,47 +8,47 @@ Neovim 是一个功能非常强大的编辑器,它的命令多到无法在这
请务必记住,本教程是为“在实践中学习”而设计的。这意味着你需要亲手完成这些练习才能 请务必记住,本教程是为“在实践中学习”而设计的。这意味着你需要亲手完成这些练习才能
真正掌握它们。如果你只看不练,很快就会忘记最重要的内容! 真正掌握它们。如果你只看不练,很快就会忘记最重要的内容!
现在请确保你的大写锁定键Caps-Lock是关闭状态然后多次按下 `j`{normal} 键, 现在请确保你的大写锁定键Caps-Lock是关闭状态然后多次按下 "j" 键,
直到光标移动到第 0 课完全充满屏幕为止。 直到光标移动到第 0 课完全充满屏幕为止。
# 第 0 课 # 第 0 课
NOTE: 课程中的命令会修改本文,但这些更改不会被保存。不用担心会搞乱什么;只要记住 NOTE: 课程中的命令会修改本文,但这些更改不会被保存。不用担心会搞乱什么;只要记住
[<Esc>](<Esc>) 键,再按 [u](u) 键,就可以撤销最近的更改。 按 <Esc> 键,再按 u 键,就可以撤销最近的更改。
本教程是交互式的,有几件事你需要知道。 本教程是交互式的,有几件事你需要知道。
- 在 [这样的](holy-grail ) 链接上按 [<Enter>](<Enter>) 键可以打开链接的帮助文档。 - 在 这样的 链接上按 <Enter> 键可以打开链接的帮助文档。
- 或者,你也可以在任意单词上按 [K](K) 键来查找它的文档! - 或者,你也可以在任意单词上按 K 键来查找它的文档!
- 你可以用 `:q`{vim} `<Enter>`{normal} 来关闭这个帮助窗口。 - 你可以用 ":q <Enter>" 来关闭这个帮助窗口。
当左边出现 ✗ 标志时,你需要去修改文本。当你正确地完成修改后,左边的 ✗ 标志就会变 当左边出现 ✗ 标志时,你需要去修改文本。当你正确地完成修改后,左边的 ✗ 标志就会变
成 ✓。我想你已经能体会到 Neovim 的强大之处了。 成 ✓。我想你已经能体会到 Neovim 的强大之处了。
其他时候,你会被提示运行一个命令(稍后会对此进行解释): 其他时候,你会被提示运行一个命令(稍后会对此进行解释):
`:help`{vim} `<Enter>`{normal} ":help <Enter>"
或者按下一系列按键: 或者按下一系列按键:
~~~ normal ~~~ normal
<Esc>0f<Space>d3wP$P <Esc>0f<Space>d3wP$P
~~~ ~~~
尖括号(<>)里的文本(如 `<Enter>`{normal})代表你需要按下的键,而不是要输入的文本。 尖括号(<>)里的文本(如 "<Enter>")代表你需要按下的键,而不是要输入的文本。
现在,移动到下一课(使用 `j`{normal} 键向下滚动)。 现在,移动到下一课(使用 "j" 键向下滚动)。
# 第 1.1 课:移动光标 # 第 1.1 课:移动光标
** 按 `h`、`j`、`k`、`l` 键来移动光标,如下所示。 ** ** 按 `h`、`j`、`k`、`l` 键来移动光标,如下所示。 **
k 提示:`h`{normal} 键在左边,向左移动。 k 提示:"h" 键在左边,向左移动。
← h l → `l`{normal} 键在右边,向右移动。 ← h l → "l" 键在右边,向右移动。
j `j`{normal} 键看起来像一个向下的箭头。 j "j" 键看起来像一个向下的箭头。
1. 在屏幕上四处移动光标,直到你习惯这种操作。 1. 在屏幕上四处移动光标,直到你习惯这种操作。
2. 按住向下键(`j`{normal})直到光标开始连续向下移动。 2. 按住向下键("j")直到光标开始连续向下移动。
现在你知道如何移动到下一课了。 现在你知道如何移动到下一课了。
3. 使用下移键,移动到第 1.2 课。 3. 使用下移键,移动到第 1.2 课。
@@ -66,30 +66,30 @@ NOTE: 键盘上的方向键通常也能用。但一旦你习惯了,使用 hjkl
2. 输入: 2. 输入:
`:q!`{vim} `<Enter>`{normal} ":q! <Enter>"
这个命令会退出编辑器,并“丢弃”你所做的所有更改。 这个命令会退出编辑器,并“丢弃”你所做的所有更改。
3. 重新打开 Neovim并通过执行带你进入本教程的命令回到这里。这个命令也许是 3. 重新打开 Neovim并通过执行带你进入本教程的命令回到这里。这个命令也许是
`:Tutor`{vim} `<Enter>`{normal} ":Tutor <Enter>"
4. 如果你已经记住了这些步骤并充满信心,请执行第 1 到 3 步来退出并重新进入编辑器。 4. 如果你已经记住了这些步骤并充满信心,请执行第 1 到 3 步来退出并重新进入编辑器。
NOTE: [:q!](:q) `<Enter>`{normal} 会丢弃你做的任何更改。在接下来的几课中,你将学习如何 NOTE: :q! "<Enter>" 会丢弃你做的任何更改。在接下来的几课中,你将学习如何
将更改保存到文件中。 将更改保存到文件中。
5. 向下移动光标到第 1.3 课。 5. 向下移动光标到第 1.3 课。
# 第 1.3 课文本编辑——删除Deletion # 第 1.3 课文本编辑——删除Deletion
** 按 `x`{normal} 键可以删除光标下的单个字符。 ** ** 按 "x" 键可以删除光标下的单个字符。 **
1. 将光标移动到下面标有 ✗ 的那一行。 1. 将光标移动到下面标有 ✗ 的那一行。
2. 为了修正错误,请将光标移动到需要被删除的字符上。 2. 为了修正错误,请将光标移动到需要被删除的字符上。
3. 按下 [x 键](x) 来删除那个多余的字符。 3. 按下 x 键 来删除那个多余的字符。
4. 重复第 2 到 4 步,直到句子正确为止。 4. 重复第 2 到 4 步,直到句子正确为止。
@@ -103,15 +103,15 @@ NOTE: 在学习本教程时,不必试图记住所有内容,你的 Neovim 词
# 第 1.4 课文本编辑——插入Insertion # 第 1.4 课文本编辑——插入Insertion
** 按 `i`{normal} 键可以插入文本。 ** ** 按 "i" 键可以插入文本。 **
1. 将光标移动到下面标有 ✗ 的第一行。 1. 将光标移动到下面标有 ✗ 的第一行。
2. 为了让第一行和第二行变得一样,请将光标移动到需要插入文本位置“之后”的那个字符上。 2. 为了让第一行和第二行变得一样,请将光标移动到需要插入文本位置“之后”的那个字符上。
3. 按下 `i`{normal} 键,然后输入需要补充的内容。 3. 按下 "i" 键,然后输入需要补充的内容。
4. 每个错误修正后,按 `<Esc>`{normal} 键回到普通模式。 4. 每个错误修正后,按 "<Esc>" 键回到普通模式。
重复第 2 到 4 步来修正整个句子。 重复第 2 到 4 步来修正整个句子。
There is text misng this . There is text misng this .
@@ -121,14 +121,14 @@ There is some text missing from this line.
# 第 1.5 课文本编辑——追加Appending # 第 1.5 课文本编辑——追加Appending
** 按 `A`{normal} 键可以在行末追加文本。 ** ** 按 "A" 键可以在行末追加文本。 **
1. 将光标移动到下面标有 ✗ 的第一行。 1. 将光标移动到下面标有 ✗ 的第一行。
光标在该行的哪个字符上并不重要。 光标在该行的哪个字符上并不重要。
2. 按下 [A](A) 键,然后输入需要补充的内容。 2. 按下 A 键,然后输入需要补充的内容。
3. 文本追加完成后,按 `<Esc>`{normal} 键回到普通模式。 3. 文本追加完成后,按 "<Esc>" 键回到普通模式。
4. 将光标移动到标有 ✗ 的第二行,并重复第 2 和第 3 步来修正这个句子。 4. 将光标移动到标有 ✗ 的第二行,并重复第 2 和第 3 步来修正这个句子。
@@ -141,11 +141,11 @@ There is also some text missing here.
# 第 1.6 课:编辑文件 # 第 1.6 课:编辑文件
** 使用 `:wq`{vim} 来写入(保存)文件并退出。 ** ** 使用 ":wq" 来写入(保存)文件并退出。 **
!! NOTE: 在执行以下任何步骤之前,请先阅读完本课的全部内容 !! !! NOTE: 在执行以下任何步骤之前,请先阅读完本课的全部内容 !!
1. 像第 1.2 课那样退出本教程:`:q!`{vim} 1. 像第 1.2 课那样退出本教程:":q!"
或者,如果你能打开另一个终端,就在那个终端里执行以下操作。 或者,如果你能打开另一个终端,就在那个终端里执行以下操作。
2. 在 shell 提示符下输入这个命令: 2. 在 shell 提示符下输入这个命令:
@@ -176,30 +176,30 @@ There is also some text missing here.
~~~ sh ~~~ sh
$ nvim 文件名 $ nvim 文件名
~~~ ~~~
3. 退出 Neovim输入`<Esc>`{normal} `:q!`{vim} `<Enter>`{normal} 放弃所有更改。 3. 退出 Neovim输入"<Esc> :q! <Enter>" 放弃所有更改。
或者输入:`<Esc>`{normal} `:wq`{vim} `<Enter>`{normal} 保存所有更改。 或者输入:"<Esc> :wq <Enter>" 保存所有更改。
4. 删除光标下的字符,输入:`x`{normal} 4. 删除光标下的字符,输入:"x"
5. 插入或追加文本,输入: 5. 插入或追加文本,输入:
`i`{normal} 插入文本 `<Esc>`{normal} 在光标前插入。 "i" 插入文本 "<Esc>" 在光标前插入。
`A`{normal} 追加文本 `<Esc>`{normal} 在当前行末尾追加。 "A" 追加文本 "<Esc>" 在当前行末尾追加。
NOTE: 按 `<Esc>`{normal} 键会让你进入普通模式,或者取消一个不想继续输入的、未完成的命令。 NOTE: 按 "<Esc>" 键会让你进入普通模式,或者取消一个不想继续输入的、未完成的命令。
现在,请继续学习第 2 课。 现在,请继续学习第 2 课。
# 第 2.1 课删除类命令Deletion # 第 2.1 课删除类命令Deletion
** 输入 `dw`{normal} 来删除一个单词word。 ** ** 输入 "dw" 来删除一个单词word。 **
1. 按 `<Esc>`{normal} 键确保你处于普通模式。 1. 按 "<Esc>" 键确保你处于普通模式。
2. 将光标移动到下面标有 ✗ 的那一行。 2. 将光标移动到下面标有 ✗ 的那一行。
3. 将光标移动到需要被删除的单词的开头。 3. 将光标移动到需要被删除的单词的开头。
4. 输入 [d](d)[w](w) 让这个单词消失。 4. 输入 dw 让这个单词消失。
There are a some words fun that don't belong paper in this sentence. There are a some words fun that don't belong paper in this sentence.
There are some words that don't belong in this sentence. There are some words that don't belong in this sentence.
@@ -208,15 +208,15 @@ There are some words that don't belong in this sentence.
# 第 2.2 课:更多删除类命令 # 第 2.2 课:更多删除类命令
** 输入 `d$`{normal} 来删除从光标到行尾的内容。 ** ** 输入 "d$" 来删除从光标到行尾的内容。 **
1. 按 `<Esc>`{normal} 键确保你处于普通模式。 1. 按 "<Esc>" 键确保你处于普通模式。
2. 将光标移动到下面标有 ✗ 的那一行。 2. 将光标移动到下面标有 ✗ 的那一行。
3. 将光标移动到正确句子的末尾(在第一个 . 之后)。 3. 将光标移动到正确句子的末尾(在第一个 . 之后)。
4. 输入 `d$`{normal} 来删除到行尾的所有内容。 4. 输入 "d$" 来删除到行尾的所有内容。
Somebody typed the end of this line twice. end of this line twice. Somebody typed the end of this line twice. end of this line twice.
@@ -224,8 +224,8 @@ Somebody typed the end of this line twice. end of this line twice.
# 第 2.3 课关于操作符operator和移动motion # 第 2.3 课关于操作符operator和移动motion
许多修改文本的命令都由一个 [操作符](operator) 和一个 [移动](navigation) 组成。 许多修改文本的命令都由一个 操作符 和一个 移动 组成。
使用 [d](d) 删除操作符的命令格式如下: 使用 d 删除操作符的命令格式如下:
d 移动 d 移动
@@ -234,11 +234,11 @@ Somebody typed the end of this line twice. end of this line twice.
移动 - 是操作符将要作用的范围(如下所列)。 移动 - 是操作符将要作用的范围(如下所列)。
一些常用的移动: 一些常用的移动:
[w](w) - 到下一个单词的开头,但不包括其第一个字符。 w - 到下一个单词的开头,但不包括其第一个字符。
[e](e) - 到当前单词的末尾,并包括最后一个字符。 e - 到当前单词的末尾,并包括最后一个字符。
[$]($) - 到当前行的末尾,并包括最后一个字符。 $ - 到当前行的末尾,并包括最后一个字符。
因此,输入 `de`{normal} 将会删除从光标到当前单词末尾的内容。 因此,输入 "de" 将会删除从光标到当前单词末尾的内容。
NOTE: 在普通模式下,不带操作符、只按下移动键,将会像预期的那样移动光标。 NOTE: 在普通模式下,不带操作符、只按下移动键,将会像预期的那样移动光标。
@@ -246,17 +246,17 @@ NOTE: 在普通模式下,不带操作符、只按下移动键,将会像预
** 在移动命令前输入一个数字,可以将其重复执行那么多次。 ** ** 在移动命令前输入一个数字,可以将其重复执行那么多次。 **
1. 将光标移动到下面标有 的那行的开头。 1. 将光标移动到下面标有 "--->" 的那行的开头。
2. 输入 `2w`{normal},光标会向前移动两个单词。 2. 输入 "2w",光标会向前移动两个单词。
3. 输入 `3e`{normal},光标会移动到前方第三个单词的末尾。 3. 输入 "3e",光标会移动到前方第三个单词的末尾。
4. 输入 `0`{normal}[零](0))可以移动到行首。 4. 输入 "0"(零)可以移动到行首。
5. 用不同的数字重复第 2 和第 3 步。 5. 用不同的数字重复第 2 和第 3 步。
This is just a line with words you can move around in. ---> This is just a line with words you can move around in.
6. 继续学习第 2.5 课。 6. 继续学习第 2.5 课。
@@ -269,7 +269,7 @@ This is just a line with words you can move around in.
1. 将光标移动到下面标有 ✗ 的那一行中第一个全大写单词上。 1. 将光标移动到下面标有 ✗ 的那一行中第一个全大写单词上。
2. 输入 `d2w`{normal} 来删除两个全大写单词。 2. 输入 "d2w" 来删除两个全大写单词。
3. 重复第 1 和第 2 步,但使用不同的计数,用一个命令删除剩余连续的全大写单词。 3. 重复第 1 和第 2 步,但使用不同的计数,用一个命令删除剩余连续的全大写单词。
@@ -277,17 +277,17 @@ This ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
# 第 2.6 课:行操作 # 第 2.6 课:行操作
** 输入 `dd`{normal} 来删除一整行。 ** ** 输入 "dd" 来删除一整行。 **
由于删除整行的操作非常频繁Vi 的设计者们决定,输入两个 d 来删除一行会更方便。 由于删除整行的操作非常频繁Vi 的设计者们决定,输入两个 d 来删除一行会更方便。
1. 将光标移动到下面短语的第 2 行。 1. 将光标移动到下面短语的第 2 行。
2. 输入 [dd](dd) 来删除该行。 2. 输入 dd 来删除该行。
3. 现在移动到第 4 行。 3. 现在移动到第 4 行。
4. 输入 `2dd`{normal} 来删除两行。 4. 输入 "2dd" 来删除两行。
1) Roses are red, 1) Roses are red,
2) Mud is fun, 2) Mud is fun,
@@ -299,21 +299,21 @@ This ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
# 第 2.7 课撤销命令Undo # 第 2.7 课撤销命令Undo
** 按 `u`{normal} 撤销上一个命令,按 `U`{normal} 恢复一整行。 ** ** 按 "u" 撤销上一个命令,按 "U" 恢复一整行。 **
1. 将光标移动到下面标有 ✗ 的那一行,并把它放在第一个错误上。 1. 将光标移动到下面标有 ✗ 的那一行,并把它放在第一个错误上。
2. 输入 `x`{normal} 来删除第一个多余的字符。 2. 输入 "x" 来删除第一个多余的字符。
3. 现在输入 `u`{normal} 来撤销上一次执行的命令。 3. 现在输入 "u" 来撤销上一次执行的命令。
4. 这次,使用 `x`{normal} 命令修正该行所有的错误。 4. 这次,使用 "x" 命令修正该行所有的错误。
5. 现在输入大写的 `U`{normal},将该行恢复到它最初始的状态。 5. 现在输入大写的 "U",将该行恢复到它最初始的状态。
6. 现在多次输入 `u`{normal},来撤销 `U`{normal} 以及之前的命令。 6. 现在多次输入 "u",来撤销 "U" 以及之前的命令。
7. 现在多次输入 `<C-r>`{normal}Ctrl + R来重做redo那些被撤销的命令。 7. 现在多次输入 "<C-r>"Ctrl + R来重做redo那些被撤销的命令。
Fiix the errors oon thhis line and reeplace them witth undo. Fiix the errors oon thhis line and reeplace them witth undo.
Fix the errors on this line and replace them with undo. Fix the errors on this line and replace them with undo.
@@ -322,13 +322,13 @@ Fix the errors on this line and replace them with undo.
# 第 2 课总结 # 第 2 课总结
1. 删除从光标到下一个单词开头的内容,输入: `dw`{normal} 1. 删除从光标到下一个单词开头的内容,输入: "dw"
2. 删除从光标到行尾的内容,输入: `d$`{normal} 2. 删除从光标到行尾的内容,输入: "d$"
3. 删除一整行,输入: `dd`{normal} 3. 删除一整行,输入: "dd"
4. 重复一个移动,在它前面加上数字: `2w`{normal} 4. 重复一个移动,在它前面加上数字: "2w"
5. 修改类命令的格式是: 5. 修改类命令的格式是:
@@ -336,29 +336,29 @@ Fix the errors on this line and replace them with undo.
其中: 其中:
操作符 - 是要做什么,比如 [d](d) 代表删除。 操作符 - 是要做什么,比如 d 代表删除。
[数字] - 是一个可选的计数,用来重复移动。 [数字] - 是一个可选的计数,用来重复移动。
移动 - 定义了操作符要作用的文本范围,例如: 移动 - 定义了操作符要作用的文本范围,例如:
[w](w)(单词), w(单词),
[$]($)(到行尾),等等。 $(到行尾),等等。
6. 移动到行首,使用零:[0](0) 6. 移动到行首,使用零:0
7. 撤销之前的操作,输入: `u`{normal}(小写 u 7. 撤销之前的操作,输入: "u"(小写 u
撤销对一整行的所有更改,输入: `U`{normal}(大写 U 撤销对一整行的所有更改,输入: "U"(大写 U
重做被撤销的操作,输入: `<C-r>`{normal} 重做被撤销的操作,输入: "<C-r>"
# 第 3.1 课粘贴命令Put # 第 3.1 课粘贴命令Put
** 输入 `p`{normal} 可以将之前删除的文本粘贴到光标之后。 ** ** 输入 "p" 可以将之前删除的文本粘贴到光标之后。 **
1. 将光标移动到下面第一个标有 `--->` 的行。 1. 将光标移动到下面第一个标有 `--->` 的行。
2. 输入 `dd`{normal} 来删除该行,并将其存入 Neovim 的一个寄存器中。 2. 输入 "dd" 来删除该行,并将其存入 Neovim 的一个寄存器中。
3. 将光标移动到 c) 行,也就是被删除那一行的“上一行”。 3. 将光标移动到 c) 行,也就是被删除那一行的“上一行”。
4. 输入 `p`{normal},将之前删除的行粘贴到光标下方。 4. 输入 "p",将之前删除的行粘贴到光标下方。
5. 重复第 2 到 4 步将所有行按正确的顺序abcd排列。 5. 重复第 2 到 4 步将所有行按正确的顺序abcd排列。
@@ -367,17 +367,17 @@ Fix the errors on this line and replace them with undo.
---> c) Intelligence is learned, ---> c) Intelligence is learned,
---> a) Roses are red, ---> a) Roses are red,
NOTE: 你也可以用 `P`{normal}(大写 P将文本粘贴到光标之前。 NOTE: 你也可以用 "P"(大写 P将文本粘贴到光标之前。
# 第 3.2 课替换命令Replace # 第 3.2 课替换命令Replace
** 输入 `rx`{normal} 可以将光标下的字符替换为 x。 ** ** 输入 "rx" 可以将光标下的字符替换为 x。 **
1. 将光标移动到下面标有 ✗ 的第一行。 1. 将光标移动到下面标有 ✗ 的第一行。
2. 将光标移动到第一个错误字符上。 2. 将光标移动到第一个错误字符上。
3. 输入 `r`{normal},然后输入正确的字符。 3. 输入 "r",然后输入正确的字符。
4. 重复第 2 和第 3 步,直到第一行和第二行完全一样。 4. 重复第 2 和第 3 步,直到第一行和第二行完全一样。
@@ -390,24 +390,24 @@ NOTE: 请记住,你应该通过实践来学习,而不是死记硬背。
# 第 3.3 课更改操作符Change # 第 3.3 课更改操作符Change
** 要更改到单词末尾,输入 `ce`{normal}。 ** ** 要更改到单词末尾,输入 "ce"。 **
1. 将光标移动到下面标有 ✗ 的第一行。 1. 将光标移动到下面标有 ✗ 的第一行。
2. 将光标放在 "lubw" 的 "u" 上。 2. 将光标放在 "lubw" 的 "u" 上。
3. 输入 `ce`{normal},然后输入正确的单词(在这种情况是输入 "ine")。 3. 输入 "ce",然后输入正确的单词(在这种情况是输入 "ine")。
4. 按下 `<Esc>`{normal},然后移动到下一个需要修改的字符。 4. 按下 "<Esc>",然后移动到下一个需要修改的字符。
5. 重复第 3 和第 4 步,直到第一句和第二句完全一样。 5. 重复第 3 和第 4 步,直到第一句和第二句完全一样。
This lubw has a few wptfd that mrrf changing usf the change operator. This lubw has a few wptfd that mrrf changing usf the change operator.
This line has a few words that need changing using the change operator. This line has a few words that need changing using the change operator.
请注意,[c](c)e 会删除单词并让你进入插入模式Insert mode 请注意,ce 会删除单词并让你进入插入模式Insert mode
# 第 3.4 课:使用 `c`{normal} 进行更多更改 # 第 3.4 课:使用 "c" 进行更多更改
** 更改操作符可以和删除操作符使用相同的移动。 ** ** 更改操作符可以和删除操作符使用相同的移动。 **
@@ -415,13 +415,13 @@ This line has a few words that need changing using the change operator.
c [数字] 移动 c [数字] 移动
2. 移动也是一样的,比如 `w`{normal}(单词)和 `$`{normal}(到行尾)。 2. 移动也是一样的,比如 "w"(单词)和 "$"(到行尾)。
3. 移动到下面标有 ✗ 的第一行。 3. 移动到下面标有 ✗ 的第一行。
4. 将光标移动到第一个错误处。 4. 将光标移动到第一个错误处。
5. 输入 `c$`{normal},然后输入该行余下正确的内容(参照第二行),最后按 `<Esc>`{normal} 5. 输入 "c$",然后输入该行余下正确的内容(参照第二行),最后按 "<Esc>"
The end of this line needs some help to make it like the second. The end of this line needs some help to make it like the second.
The end of this line needs to be corrected using the c$ command. The end of this line needs to be corrected using the c$ command.
@@ -430,13 +430,13 @@ NOTE: 在输入时你可以使用退格键Backspace来修正错误。
# 第 3 课总结 # 第 3 课总结
1. 要粘贴刚刚删除的文本,输入 [p](p)。这会把删除的文本放在光标“之后” 1. 要粘贴刚刚删除的文本,输入 p。这会把删除的文本放在光标“之后”
(如果删除的是一整行,它会被粘贴到光标所在行的下一行)。 (如果删除的是一整行,它会被粘贴到光标所在行的下一行)。
2. 要替换光标下的单个字符,输入 [r](r) 然后输入你想要的那个字符。 2. 要替换光标下的单个字符,输入 r 然后输入你想要的那个字符。
3. [更改操作符](c) 允许你更改从光标开始到一个移动命令结束位置的文本。 3. 更改操作符 允许你更改从光标开始到一个移动命令结束位置的文本。
输入 `ce`{normal} 来更改到单词末尾,`c$`{normal} 来更改到行尾,等等。 输入 "ce" 来更改到单词末尾,"c$" 来更改到行尾,等等。
4. 更改命令的格式是: 4. 更改命令的格式是:
@@ -446,60 +446,60 @@ NOTE: 在输入时你可以使用退格键Backspace来修正错误。
# 第 4.1 课:光标位置和文件状态 # 第 4.1 课:光标位置和文件状态
** 输入 `<C-g>`{normal} 来显示你在文件中的位置和文件状态。 ** 输入 "<C-g>" 来显示你在文件中的位置和文件状态。
输入 `{count}G`{normal} 来移动到文件中的第 {count} 行。 ** 输入 "{count}G" 来移动到文件中的第 {count} 行。 **
NOTE: 在执行任何步骤之前,请先阅读完本课的全部内容!! NOTE: 在执行任何步骤之前,请先阅读完本课的全部内容!!
1. 按住 `<Ctrl>`{normal} 键并按下 `g`{normal}。我们称这个操作为 `<C-g>`{normal} 1. 按住 "<Ctrl>" 键并按下 "g"。我们称这个操作为 "<C-g>"
屏幕底部会出现一条消息,包含文件名和你在文件中的位置。 屏幕底部会出现一条消息,包含文件名和你在文件中的位置。
请记住行号,第 3 步会用到。 请记住行号,第 3 步会用到。
NOTE: 你可能会在屏幕右下角看到光标位置。这是因为设置了 ['ruler']('ruler') 选项。 NOTE: 你可能会在屏幕右下角看到光标位置。这是因为设置了 'ruler' 选项。
2. 按 [G](G) 移动到文件的末尾。 2. 按 G 移动到文件的末尾。
输入 [gg](gg) 移动到文件的开头。 输入 gg 移动到文件的开头。
3. 输入你之前记住的行号,然后按 `G`{normal}。这会让你回到你第一次按 `<C-g>`{normal} 时所在的行。 3. 输入你之前记住的行号,然后按 "G"。这会让你回到你第一次按 "<C-g>" 时所在的行。
4. 如果你觉得没问题,就执行第 1 到 3 步。 4. 如果你觉得没问题,就执行第 1 到 3 步。
# 第 4.2 课:搜索命令 # 第 4.2 课:搜索命令
** 输入 `/`{normal} 后面跟一个短语,来搜索这个短语。 ** ** 输入 "/" 后面跟一个短语,来搜索这个短语。 **
1. 在普通模式下,输入 `/`{normal} 字符。注意它和光标会出现在屏幕底部, 1. 在普通模式下,输入 "/" 字符。注意它和光标会出现在屏幕底部,
就像 `:`{normal} 命令一样。 就像 ":" 命令一样。
2. 现在输入 errroor `<Enter>`{normal}。这是你想要搜索的词。 2. 现在输入 errroor "<Enter>"。这是你想要搜索的词。
3. 要再次搜索同一个短语,只需输入 [n](n) 3. 要再次搜索同一个短语,只需输入 n
要反向搜索同一个短语,输入 [N](N) 要反向搜索同一个短语,输入 N
4. 要反向搜索一个短语,使用 [?](?) 而不是 `/`{normal} 4. 要反向搜索一个短语,使用 ? 而不是 "/"
5. 要回到你之前的位置,按 `<C-o>`{normal}。(按住 `<Ctrl>`{normal} 键的同时按字母 `o`{normal})。 5. 要回到你之前的位置,按 "<C-o>"。(按住 "<Ctrl>" 键的同时按字母 "o")。
重复按可以回到更早的位置。`<C-i>`{normal} 则会前进。 重复按可以回到更早的位置。"<C-i>" 则会前进。
"errroor" is not the way to spell error; errroor is an error. ---> "errroor" is not the way to spell error; errroor is an error.
NOTE: 当搜索到达文件末尾时,它会从头开始继续搜索,除非 ['wrapscan']('wrapscan') 选项被关闭了。 NOTE: 当搜索到达文件末尾时,它会从头开始继续搜索,除非 'wrapscan' 选项被关闭了。
# 第 4.3 课:括号匹配搜索 # 第 4.3 课:括号匹配搜索
** 输入 `%`{normal} 来查找匹配的 ), ], }。 ** ** 输入 "%" 来查找匹配的 ), ], }。 **
1. 将光标放在下面标有 的那一行中的任意一个 (, [, { 上。 1. 将光标放在下面标有 "--->" 的那一行中的任意一个 (, [, { 上。
2. 现在输入 [%](%) 字符。 2. 现在输入 % 字符。
3. 光标会移动到与之匹配的括号上。 3. 光标会移动到与之匹配的括号上。
4. 再次输入 `%`{normal},光标会移回另一半匹配的括号。 4. 再次输入 "%",光标会移回另一半匹配的括号。
5. 将光标移动到另一个 (, ), [, ], {, } 上,看看 `%`{normal} 的效果。 5. 将光标移动到另一个 (, ), [, ], {, } 上,看看 "%" 的效果。
This ( is a test line with ('s, ['s, ] and {'s } in it. )) ---> This ( is a test line with ('s, ['s, ] and {'s } in it. ))
NOTE: 这在调试程序中不匹配的括号时非常有用! NOTE: 这在调试程序中不匹配的括号时非常有用!
@@ -513,13 +513,13 @@ NOTE: 这在调试程序中不匹配的括号时非常有用!
~~~ cmd ~~~ cmd
:s/thee/the/ :s/thee/the/
~~~ ~~~
NOTE: [:s](:s) 命令只改变了行中第一个匹配的 "thee"。 NOTE: :s 命令只改变了行中第一个匹配的 "thee"。
3. 现在输入 3. 现在输入
~~~ cmd ~~~ cmd
:s/thee/the/g :s/thee/the/g
~~~ ~~~
加上 g [标志](:s_flags) 意味着在行内进行全局替换,也就是改变该行中所有出现的 "thee"。 加上 g 标志 意味着在行内进行全局替换,也就是改变该行中所有出现的 "thee"。
Usually thee best time to see thee flowers is in thee spring. Usually thee best time to see thee flowers is in thee spring.
@@ -545,17 +545,17 @@ NOTE: 你也可以先用可视模式Visual mode选中你想替换的行。
# 第 4 课总结 # 第 4 课总结
1. `<C-g>`{normal} 显示你的位置和文件状态。 1. "<C-g>" 显示你的位置和文件状态。
`G`{normal} 移动到文件末尾。 "G" 移动到文件末尾。
数字 `G`{normal} 移动到指定的行号。 数字 "G" 移动到指定的行号。
`gg`{normal} 移动到第一行。 "gg" 移动到第一行。
2. 输入 `/`{normal} 后跟一个短语,会“向前”搜索该短语。 2. 输入 "/" 后跟一个短语,会“向前”搜索该短语。
输入 `?`{normal} 后跟一个短语,会“向后”搜索该短语。 输入 "?" 后跟一个短语,会“向后”搜索该短语。
搜索后,输入 `n`{normal} 查找下一个(同方向),或 `N`{normal} 查找下一个(反方向)。 搜索后,输入 "n" 查找下一个(同方向),或 "N" 查找下一个(反方向)。
`<C-o>`{normal} 带你回到旧的光标位置,`<C-i>`{normal} 则去往新的位置。 "<C-o>" 带你回到旧的光标位置,"<C-i>" 则去往新的位置。
3. 当光标在 (, ), [, ], {, } 上时,输入 `%`{normal} 会跳转到其匹配的另一半。 3. 当光标在 (, ), [, ], {, } 上时,输入 "%" 会跳转到其匹配的另一半。
4. 将行内第一个 old 替换为 new输入 4. 将行内第一个 old 替换为 new输入
~~~ cmd ~~~ cmd
@@ -580,26 +580,26 @@ NOTE: 你也可以先用可视模式Visual mode选中你想替换的行。
# 第 5.1 课:如何执行外部命令 # 第 5.1 课:如何执行外部命令
** 输入 `:!`{vim} 后面跟一个外部命令,来执行该命令。 ** ** 输入 ":!" 后面跟一个外部命令,来执行该命令。 **
1. 输入你熟悉的命令 `:`{normal},让光标定位到屏幕底部。这允许你输入一个 1. 输入你熟悉的命令 ":",让光标定位到屏幕底部。这允许你输入一个
命令行命令。 命令行命令。
2. 现在输入 [!](!cmd)(感叹号)字符。这允许你执行任何外部的 shell 命令。 2. 现在输入 !(感叹号)字符。这允许你执行任何外部的 shell 命令。
3. 举个例子,在 "!" 后面输入 "ls",然后按 `<Enter>`{normal} 3. 举个例子,在 "!" 后面输入 "ls",然后按 "<Enter>"
这会显示你的目录列表,就像你在 shell 提示符下一样。 这会显示你的目录列表,就像你在 shell 提示符下一样。
NOTE: 你可以用这种方式执行任何外部命令,并且可以带参数。 NOTE: 你可以用这种方式执行任何外部命令,并且可以带参数。
NOTE: 所有 `:`{vim} 命令都在你按下 `<Enter>`{normal} 后执行。 NOTE: 所有 ":" 命令都在你按下 "<Enter>" 后执行。
# 第 5.2 课:更多关于写入文件的知识 # 第 5.2 课:更多关于写入文件的知识
** 要保存对文本的更改,输入 `:w`{vim} 文件名。 ** ** 要保存对文本的更改,输入 ":w" 文件名。 **
1. 输入 `:!{unix:(ls),win:(dir)}`{vim} 来获取你的目录列表。 1. 输入 ":!{unix:(ls),win:(dir)}" 来获取你的目录列表。
你已经知道在这之后必须按 `<Enter>`{normal} 你已经知道在这之后必须按 "<Enter>"
2. 选择一个还不存在的文件名,比如 TEST。 2. 选择一个还不存在的文件名,比如 TEST。
@@ -610,7 +610,7 @@ NOTE: 所有 `:`{vim} 命令都在你按下 `<Enter>`{normal} 后执行。
(这里的 TEST 是你选择的文件名。) (这里的 TEST 是你选择的文件名。)
4. 这会将当前文件以 TEST 的名字保存。 4. 这会将当前文件以 TEST 的名字保存。
要验证这一点,再次输入 `:!{unix:(ls),win:(dir)}`{vim} 来查看你的目录。 要验证这一点,再次输入 ":!{unix:(ls),win:(dir)}" 来查看你的目录。
NOTE: 如果你退出 Neovim然后用 `nvim TEST` 再次启动它,这个文件将会是你保存时教程 NOTE: 如果你退出 Neovim然后用 `nvim TEST` 再次启动它,这个文件将会是你保存时教程
内容的一个精确副本。 内容的一个精确副本。
@@ -622,44 +622,44 @@ NOTE: 如果你退出 Neovim然后用 `nvim TEST` 再次启动它,这个文
# 第 5.3 课:选择要写入的文本 # 第 5.3 课:选择要写入的文本
** 要保存文件的一部分,输入 `v`{normal} 移动 `:w 文件名`{vim}。 ** ** 要保存文件的一部分,输入 "v" 移动 ":w 文件名"。 **
1. 将光标移动到这一行。 1. 将光标移动到这一行。
2. 按下 [v](v) 并将光标移动到下面的第五项。注意文本被高亮了。 2. 按下 v 并将光标移动到下面的第五项。注意文本被高亮了。
3. 按下 `:`{normal} 字符。在屏幕底部会出现: 3. 按下 ":" 字符。在屏幕底部会出现:
`:'<,'>`{vim} ":'<,'>"
4. 输入 4. 输入
`w TEST`{vim} "w TEST"
这里的 TEST 是一个还不存在的文件名。在按 `<Enter>`{normal} 之前, 这里的 TEST 是一个还不存在的文件名。在按 "<Enter>" 之前,
确认你看到的是: 确认你看到的是:
`:'<,'>w TEST`{vim} ":'<,'>w TEST"
5. Neovim 会将被选中的行写入文件 TEST。使用 `:!{unix:(ls),win:(dir)}`{vim} 来查看它。 5. Neovim 会将被选中的行写入文件 TEST。使用 ":!{unix:(ls),win:(dir)}" 来查看它。
先不要删除它!我们将在下一课用到它。 先不要删除它!我们将在下一课用到它。
NOTE: 按下 [v](v) 会启动 [可视选择Visual selection](visual-mode)。你可以移动光标来扩大或缩小选择范围。 NOTE: 按下 v 会启动 可视选择Visual selection。你可以移动光标来扩大或缩小选择范围。
然后你可以使用一个操作符来对选中的文本 然后你可以使用一个操作符来对选中的文本
做些什么。例如,`d`{normal} 会删除选中的文本。 做些什么。例如,"d" 会删除选中的文本。
# 第 5.4 课:读取和合并文件 # 第 5.4 课:读取和合并文件
** 要读取一个文件的内容,输入 `:r 文件名`{vim}。 ** ** 要读取一个文件的内容,输入 ":r 文件名"。 **
1. 将光标放在这一行的正上方。 1. 将光标放在这一行的正上方。
NOTE: 执行第 2 步后,你会看到第 5.3 课的文本。然后向下移动 NOTE: 执行第 2 步后,你会看到第 5.3 课的文本。然后向下移动
才能再次看到本课内容。完成后按 `u`{normal} 撤销。 才能再次看到本课内容。完成后按 "u" 撤销。
2. 现在使用以下命令读取你的 TEST 文件: 2. 现在使用以下命令读取你的 TEST 文件:
`:r TEST`{vim} ":r TEST"
这里的 TEST 是你之前使用的文件名。 这里的 TEST 是你之前使用的文件名。
你读取的文件内容会被放在光标所在行的下方。 你读取的文件内容会被放在光标所在行的下方。
@@ -669,71 +669,71 @@ NOTE: 执行第 2 步后,你会看到第 5.3 课的文本。然后向下移动
NOTE: 你也可以读取一个外部命令的输出。例如: NOTE: 你也可以读取一个外部命令的输出。例如:
`:r !{unix:(ls),win:(dir)}`{vim} ":r !{unix:(ls),win:(dir)}"
会读取 `ls` 命令的输出,并将其放在光标下方。 会读取 `ls` 命令的输出,并将其放在光标下方。
# 第 5 课总结 # 第 5 课总结
1. [:!command](:!cmd) 执行一个外部命令。 1. :!command 执行一个外部命令。
一些有用的例子: 一些有用的例子:
`:!{unix:(ls ),win:(dir)}`{vim} - 显示目录列表 ":!{unix:(ls ),win:(dir)}" - 显示目录列表
`:!{unix:(rm ),win:(del)} 文件`{vim} - 删除文件 ":!{unix:(rm ),win:(del)} 文件" - 删除文件
2. [:w](:w) 文件名 将当前 Neovim 文件以“文件名”这个名字写入磁盘。 2. :w 文件名 将当前 Neovim 文件以“文件名”这个名字写入磁盘。
3. [v](v) 移动 :w 文件名 将可视模式选中的行保存到文件“文件名”中。 3. v 移动 :w 文件名 将可视模式选中的行保存到文件“文件名”中。
4. [:r](:r) 文件名 读取磁盘文件“文件名”的内容,并将其放在光标位置的下方。 4. :r 文件名 读取磁盘文件“文件名”的内容,并将其放在光标位置的下方。
5. {unix:([:r !ls](:r!) ),win:([:r !dir](:r!))} 读取 {unix:(ls),win:(dir)} 命令的输出,并将其放在光标位置的下方。 5. {unix:(:r !ls ),win:(:r !dir)} 读取 {unix:(ls),win:(dir)} 命令的输出,并将其放在光标位置的下方。
# 第 6.1 课开启新行命令Open # 第 6.1 课开启新行命令Open
** 输入 `o`{normal} 可以在光标下方开启一个新行,并进入插入模式。 ** ** 输入 "o" 可以在光标下方开启一个新行,并进入插入模式。 **
1. 将光标移动到下面标有 的那一行。 1. 将光标移动到下面标有 "--->" 的那一行。
2. 输入小写字母 `o`{normal},在光标“下方”[开启](o)一个新行,并让你进入插入模式。 2. 输入小写字母 "o",在光标“下方”开启一个新行,并让你进入插入模式。
3. 现在输入一些文本,然后按 `<Esc>`{normal} 退出插入模式。完成后请删除你开启的行。 3. 现在输入一些文本,然后按 "<Esc>" 退出插入模式。完成后请删除你开启的行。
After typing `o`{normal} the cursor is placed on the open line in Insert mode. ---> After typing "o" the cursor is placed on the open line in Insert mode.
4. 要在光标“上方”开启一个新行,只需输入[大写 O](O),而不是小写 `o`{normal} 4. 要在光标“上方”开启一个新行,只需输入大写 O而不是小写 "o"
在下面这行上试试。完成后请删除你开启的行。 在下面这行上试试。完成后请删除你开启的行。
Open up a line above this by typing O while the cursor is on this line. ---> Open up a line above this by typing O while the cursor is on this line.
# 第 6.2 课追加命令Append # 第 6.2 课追加命令Append
** 输入 `a`{normal} 可以在光标“之后”插入文本。 ** ** 输入 "a" 可以在光标“之后”插入文本。 **
1. 将光标移动到下面标有 ✗ 的那行的开头。 1. 将光标移动到下面标有 ✗ 的那行的开头。
2. 按 `e`{normal} 直到光标移动到 "li" 的末尾。 2. 按 "e" 直到光标移动到 "li" 的末尾。
3. 输入小写字母 `a`{normal},在光标“之后”[追加](a)文本。 3. 输入小写字母 "a",在光标“之后”追加文本。
4. 参照下一行,补全这个单词。按 `<Esc>`{normal} 退出插入模式。 4. 参照下一行,补全这个单词。按 "<Esc>" 退出插入模式。
5. 使用 `e`{normal} 移动到下一个不完整的单词,并重复第 3 和第 4 步。 5. 使用 "e" 移动到下一个不完整的单词,并重复第 3 和第 4 步。
This li will allow you to pract appendi text to a line. This li will allow you to pract appendi text to a line.
This line will allow you to practice appending text to a line. This line will allow you to practice appending text to a line.
NOTE: [a](a)、[i](i) 和 [A](A) 都会进入同一个插入模式,唯一的区别是字符被插入的位置不同。 NOTE: a、i 和 A 都会进入同一个插入模式,唯一的区别是字符被插入的位置不同。
# 第 6.3 课:另一种替换方式 # 第 6.3 课:另一种替换方式
** 输入大写 `R`{normal} 可以替换多个字符。 ** ** 输入大写 "R" 可以替换多个字符。 **
1. 将光标移动到下面标有 ✗ 的第一行。将光标移动到第一个 "xxx" 的开头。 1. 将光标移动到下面标有 ✗ 的第一行。将光标移动到第一个 "xxx" 的开头。
2. 现在按下 `R`{normal}[大写 R](R))并输入第二行中对应的数字,用它来替换 "xxx"。 2. 现在按下 "R"(大写 R)并输入第二行中对应的数字,用它来替换 "xxx"。
3. 按下 `<Esc>`{normal} 离开[替换模式Replace mode](mode-replace)。注意该行余下的部分保持不变。 3. 按下 "<Esc>" 离开替换模式Replace mode。注意该行余下的部分保持不变。
4. 重复以上步骤来替换剩下的 "xxx"。 4. 重复以上步骤来替换剩下的 "xxx"。
@@ -744,30 +744,30 @@ NOTE: 替换模式很像插入模式,但你输入的每个字符都会替换
# 第 6.4 课:复制和粘贴文本 # 第 6.4 课:复制和粘贴文本
** 使用 `y`{normal} 操作符来复制yank文本`p`{normal} 来粘贴put它。 ** ** 使用 "y" 操作符来复制yank文本"p" 来粘贴put它。 **
1. 去到下面标有 的那一行,并将光标放在 "a)" 之后。 1. 去到下面标有 "--->" 的那一行,并将光标放在 "a)" 之后。
2. 用 `v`{normal} 启动可视模式,并将光标移动到 "first" 之前。 2. 用 "v" 启动可视模式,并将光标移动到 "first" 之前。
3. 输入 `y`{normal}[复制yank](yank) 高亮的文本。 3. 输入 "y" 来 复制yank 高亮的文本。
4. 将光标移动到下一行的末尾:`j$`{normal} 4. 将光标移动到下一行的末尾:"j$"
5. 输入 `p`{normal}[粘贴put](put) 文本。 5. 输入 "p" 来 粘贴put 文本。
6. 按下 `a`{normal} 然后输入 "second"。按 `<Esc>`{normal} 离开 6. 按下 "a" 然后输入 "second"。按 "<Esc>" 离开
插入模式。 插入模式。
7. 使用可视模式选中 "item.",用 `y`{normal} 复制它,用 `j$`{normal} 移动到 7. 使用可视模式选中 "item.",用 "y" 复制它,用 "j$" 移动到
下一行的末尾,然后用 `p`{normal} 在那里粘贴文本。 下一行的末尾,然后用 "p" 在那里粘贴文本。
a) This is the first item. a) This is the first item.
b) b)
NOTE: 你可以把 `y`{normal} 当作一个操作符来使用:`yw`{normal} 会复制一个单词。 NOTE: 你可以把 "y" 当作一个操作符来使用:"yw" 会复制一个单词。
NOTE: 你可以用 `P`{normal} 在光标前粘贴,而不是在光标后。 NOTE: 你可以用 "P" 在光标前粘贴,而不是在光标后。
# 第 6.5 课设置选项Set # 第 6.5 课设置选项Set
@@ -776,13 +776,13 @@ NOTE: 你可以用 `P`{normal} 在光标前粘贴,而不是在光标后。
Neovim 中有许多设置,你可以配置它们来满足你的需求。 Neovim 中有许多设置,你可以配置它们来满足你的需求。
1. 通过输入 `/ignore` 来搜索 'ignore'。 1. 通过输入 `/ignore` 来搜索 'ignore'。
多按几次 `n`{normal} 来重复搜索。 多按几次 "n" 来重复搜索。
2. 通过输入以下命令来设置 'ic'Ignore case即忽略大小写 选项: 2. 通过输入以下命令来设置 'ic'Ignore case即忽略大小写 选项:
~~~ cmd ~~~ cmd
:set ic :set ic
~~~ ~~~
3. 现在再次按 `n`{normal} 搜索 'ignore'。 3. 现在再次按 "n" 搜索 'ignore'。
注意 Ignore 和 IGNORE 现在也能被找到了。 注意 Ignore 和 IGNORE 现在也能被找到了。
4. 设置 'hlsearch' 和 'incsearch' 选项: 4. 设置 'hlsearch' 和 'incsearch' 选项:
@@ -803,24 +803,24 @@ NOTE: 要移除匹配项的高亮,输入:
~~~ cmd ~~~ cmd
:nohlsearch :nohlsearch
~~~ ~~~
NOTE: 如果你只想在某一次搜索命令中忽略大小写,在短语中使用 [\c](/\c) NOTE: 如果你只想在某一次搜索命令中忽略大小写,在短语中使用 \c
/ignore\c <Enter> /ignore\c <Enter>
# 第 6 课总结 # 第 6 课总结
1. 输入 `o`{normal} 在光标“下方”开启一个新行并进入插入模式。 1. 输入 "o" 在光标“下方”开启一个新行并进入插入模式。
输入 `O`{normal} 在光标“上方”开启一个新行。 输入 "O" 在光标“上方”开启一个新行。
2. 输入 `a`{normal} 在光标“之后”插入文本。 2. 输入 "a" 在光标“之后”插入文本。
输入 `A`{normal} 在行尾之后插入文本。 输入 "A" 在行尾之后插入文本。
3. `e`{normal} 命令移动到一个单词的末尾。 3. "e" 命令移动到一个单词的末尾。
4. `y`{normal} 操作符复制文本,`p`{normal} 粘贴它。 4. "y" 操作符复制文本,"p" 粘贴它。
5. 输入大写 `R`{normal} 会进入替换模式,直到按下 `<Esc>`{normal} 5. 输入大写 "R" 会进入替换模式,直到按下 "<Esc>"
6. 输入 "[:set](:set) xxx" 可以设置选项 "xxx"。一些有用的选项是: 6. 输入 ":set xxx" 可以设置选项 "xxx"。一些有用的选项是:
'ic' 'ignorecase' 搜索时忽略大小写 'ic' 'ignorecase' 搜索时忽略大小写
'is' 'incsearch' 实时显示搜索短语的部分匹配 'is' 'incsearch' 实时显示搜索短语的部分匹配
@@ -844,12 +844,12 @@ Neovim 有一个全面的在线帮助系统。
要开始使用,试试下面两种方法之一: 要开始使用,试试下面两种方法之一:
- 按下 `<F1>`{normal} 键(如果你有的话) - 按下 "<F1>" 键(如果你有的话)
- 输入 `:help`{vim} - 输入 ":help"
阅读帮助窗口中的文本,了解帮助系统是如何工作的。 阅读帮助窗口中的文本,了解帮助系统是如何工作的。
输入 `<C-w><C-w>`{normal} 可以在窗口之间跳转。 输入 "<C-w><C-w>" 可以在窗口之间跳转。
输入 `:q`{vim} 关闭帮助窗口。 输入 ":q" 关闭帮助窗口。
你几乎可以找到任何主题的帮助,只需给 ":help" 命令传递一个参数。 你几乎可以找到任何主题的帮助,只需给 ":help" 命令传递一个参数。
试试这些(别忘了按 <Enter>: 试试这些(别忘了按 <Enter>:
@@ -862,27 +862,27 @@ Neovim 有一个全面的在线帮助系统。
# 第 7.2 课:补全功能 # 第 7.2 课:补全功能
** 使用 `<C-d>`{normal}`<Tab>`{normal} 进行命令行补全。 ** ** 使用 "<C-d>""<Tab>" 进行命令行补全。 **
1. 列出当前目录的内容:`:!{unix:(ls),win:(dir)}`{vim} 1. 列出当前目录的内容:":!{unix:(ls),win:(dir)}"
2. 输入一个命令的开头:`:e`{vim} 2. 输入一个命令的开头:":e"
3. 按下 `<C-d>`{normal}Neovim 会显示一个以 "e" 开头的命令列表。 3. 按下 "<C-d>"Neovim 会显示一个以 "e" 开头的命令列表。
4. 按下 `<Tab>`{normal}Neovim 会显示一个包含可能补全项的菜单 4. 按下 "<Tab>"Neovim 会显示一个包含可能补全项的菜单
(或者如果输入的命令是唯一的,则直接补全,例如 ":ed`<Tab>`{normal}" 会被补全为 ":edit")。 (或者如果输入的命令是唯一的,则直接补全,例如 ":ed"<Tab>"" 会被补全为 ":edit")。
5. 使用 `<Tab>`{normal}`<C-n>`{normal} 移动到下一个匹配项。或者 5. 使用 "<Tab>""<C-n>" 移动到下一个匹配项。或者
使用 `<S-Tab>`{normal}`<C-p>`{normal} 移动到上一个匹配项。 使用 "<S-Tab>""<C-p>" 移动到上一个匹配项。
6. 选择 `edit`{vim} 条目。现在你可以看到 `edit`{vim} 这个词已经被自动插入到命令行了。 6. 选择 "edit" 条目。现在你可以看到 "edit" 这个词已经被自动插入到命令行了。
7. 现在加上一个空格和一个已存在文件名的开头:`:edit FIL`{vim} 7. 现在加上一个空格和一个已存在文件名的开头:":edit FIL"
8. 按下 `<Tab>`{normal}。Vim 会显示一个补全菜单,列出以 `FIL` 开头的文件名。 8. 按下 "<Tab>"。Vim 会显示一个补全菜单,列出以 `FIL` 开头的文件名。
NOTE: 补全功能对许多命令都有效。它对 `:help`{vim} 命令尤其有用。 NOTE: 补全功能对许多命令都有效。它对 ":help" 命令尤其有用。
# 第 7.3 课:配置 NVIM # 第 7.3 课:配置 NVIM
@@ -892,42 +892,42 @@ Vimscript文件名可以是 "init.vim"。在本课中,我们将使用 "init
1. 开始编辑 "init.lua" 文件。 1. 开始编辑 "init.lua" 文件。
`:exe 'edit' stdpath('config')..'/init.lua'`{vim} ":exe 'edit' stdpath('config')..'/init.lua'"
2. 将 Lua 的示例配置复制到你的 "init.lua" 文件中。 2. 将 Lua 的示例配置复制到你的 "init.lua" 文件中。
`:read $VIMRUNTIME/example_init.lua`{vim} ":read $VIMRUNTIME/example_init.lua"
3. 写入文件(这也会创建任何缺失的父目录): 3. 写入文件(这也会创建任何缺失的父目录):
`:w ++p`{vim} ":w ++p"
4. 下次你启动 Neovim 时,可以用以下命令快速打开这个 vimrc 文件: 4. 下次你启动 Neovim 时,可以用以下命令快速打开这个 vimrc 文件:
`:e $MYVIMRC`{vim} ":e $MYVIMRC"
# 第 7 课总结 # 第 7 课总结
1. 输入 `:help`{vim} 1. 输入 ":help"
或按下 `<F1>`{normal}`<Help>`{normal} 来打开一个帮助窗口。 或按下 "<F1>""<Help>" 来打开一个帮助窗口。
2. 输入 `:help 主题`{vim} 来查找关于“主题”的帮助。 2. 输入 ":help 主题" 来查找关于“主题”的帮助。
3. 输入 `<C-w><C-w>`{normal} 来跳转到另一个窗口。 3. 输入 "<C-w><C-w>" 来跳转到另一个窗口。
4. 输入 `:q`{vim} 来关闭帮助窗口。 4. 输入 ":q" 来关闭帮助窗口。
5. 在命令模式下,按 `<C-d>`{normal} 查看可能的补全。按 `<Tab>`{normal} 使用补全菜单并选择一个匹配项。 5. 在命令模式下,按 "<C-d>" 查看可能的补全。按 "<Tab>" 使用补全菜单并选择一个匹配项。
6. 创建你的配置文件来保存你的偏好设置。你可以用 `:e $MYVIMRC`{vim} 再次访问它。 6. 创建你的配置文件来保存你的偏好设置。你可以用 ":e $MYVIMRC" 再次访问它。
# 接下来呢? # 接下来呢?
运行 `:help nvim-quickstart`{vim} 获取更多关于扩展 Nvim 的信息。 运行 ":help nvim-quickstart" 获取更多关于扩展 Nvim 的信息。
# 结语 # 结语
这就是 Vim 教程第一章的全部内容。你可以继续学习[第二章](@tutor:vim-02-beginner) 这就是 Vim 教程第一章的全部内容。你可以继续学习第二章。
本教程旨在简要介绍 Neovim 编辑器,内容刚好足够让你能比较轻松地使用它。它远非完 本教程旨在简要介绍 Neovim 编辑器,内容刚好足够让你能比较轻松地使用它。它远非完
整,因为 Neovim 还有许许多多其他的命令。请经常查阅帮助文档。网上也有无数优秀的 整,因为 Neovim 还有许许多多其他的命令。请经常查阅帮助文档。网上也有无数优秀的

View File

@@ -11,7 +11,6 @@
"204": "There are some words that don't belong in this sentence.", "204": "There are some words that don't belong in this sentence.",
"205": "There are some words that don't belong in this sentence.", "205": "There are some words that don't belong in this sentence.",
"221": "Somebody typed the end of this line twice.", "221": "Somebody typed the end of this line twice.",
"259": -1,
"276": "This line of words is cleaned up.", "276": "This line of words is cleaned up.",
"292": "1) Roses are red,", "292": "1) Roses are red,",
"293": "", "293": "",
@@ -28,11 +27,7 @@
"406": "This line has a few words that need changing using the change operator.", "406": "This line has a few words that need changing using the change operator.",
"426": "The end of this line needs to be corrected using the c$ command.", "426": "The end of this line needs to be corrected using the c$ command.",
"427": "The end of this line needs to be corrected using the c$ command.", "427": "The end of this line needs to be corrected using the c$ command.",
"484": -1,
"502": -1,
"524": "Usually the best time to see the flowers is in the spring.", "524": "Usually the best time to see the flowers is in the spring.",
"702": -1,
"707": -1,
"723": "This line will allow you to practice appending text to a line.", "723": "This line will allow you to practice appending text to a line.",
"724": "This line will allow you to practice appending text to a line.", "724": "This line will allow you to practice appending text to a line.",
"740": "Adding 123 to 456 gives you 579.", "740": "Adding 123 to 456 gives you 579.",

View File

@@ -7,7 +7,7 @@
~~~ cmd ~~~ cmd
:Tutor vim-01-beginner :Tutor vim-01-beginner
~~~ ~~~
或者直接点击链接打开教程的[第一章](@tutor:vim-01-beginner) 或者直接点击链接打开教程的第一章。
完成本章大约需要 8-10 分钟,具体取决于您在实践探索上花费的时间。 完成本章大约需要 8-10 分钟,具体取决于您在实践探索上花费的时间。
@@ -16,31 +16,31 @@
** 同时复制两个单词,然后分别粘贴它们 ** ** 同时复制两个单词,然后分别粘贴它们 **
1. 将光标移动到下面标有 的那一行。 1. 将光标移动到下面标有 "--->" 的那一行。
2. 导航到 'Edward' 单词的任意位置,然后输入 `"ayiw`{normal} 2. 导航到 'Edward' 单词的任意位置,然后输入 ""ayiw"
**助记***将 (i)nner (w)ord内部单词(y)ank复制到名为 (a) 的寄存器(")中* **助记***将 (i)nner (w)ord内部单词(y)ank复制到名为 (a) 的寄存器(")中*
3. 向前导航到 'cookie' 单词(可以使用 `fk`{normal}`2fc`{normal} 3. 向前导航到 'cookie' 单词(可以使用 "fk""2fc"
`$2b`{normal}`/co`{normal} `<Enter>`{normal}),然后输入 `"byiw`{normal} "$2b""/co <Enter>"),然后输入 ""byiw"
4. 导航到 'Vince' 单词的任意位置,然后输入 `ciw<CTRL-r>a<ESC>`{normal} 4. 导航到 'Vince' 单词的任意位置,然后输入 "ciw<CTRL-r>a<ESC>"
**助记***用名为 (a) 的寄存器(<contents of (r)egister>)的内容 (c)hange (i) **助记***用名为 (a) 的寄存器(<contents of (r)egister>)的内容 (c)hange (i)
nner (w)ord修改内部单词* nner (w)ord修改内部单词*
5. 导航到 'cake' 单词的任意位置,然后输入 `ciw<CTRL-r>b<ESC>`{normal} 5. 导航到 'cake' 单词的任意位置,然后输入 "ciw<CTRL-r>b<ESC>"
a) Edward will henceforth be in charge of the cookie rations ---> a) Edward will henceforth be in charge of the cookie rations
b) In this capacity, Vince will have sole cake discretionary powers b) In this capacity, Vince will have sole cake discretionary powers
NOTE: 删除操作同样可以存入寄存器,例如 `"sdiw`{normal} 会将被光标下的单词删除并存入寄存器 s。 NOTE: 删除操作同样可以存入寄存器,例如 ""sdiw" 会将被光标下的单词删除并存入寄存器 s。
参考:[寄存器](registers) 参考:寄存器
[命名寄存器](quotea) 命名寄存器
[移动与文本对象](text-objects) 移动与文本对象
[CTRL-R](i_CTRL-R) CTRL-R
# 第 2.1.2 课:表达式寄存器 # 第 2.1.2 课:表达式寄存器
@@ -51,42 +51,42 @@ NOTE: 删除操作同样可以存入寄存器,例如 `"sdiw`{normal} 会将被
2. 导航到所给数字的任意位置。 2. 导航到所给数字的任意位置。
3. 输入 `ciw<CTRL-r>=`{normal}60\*60\*24 `<Enter>`{normal} 3. 输入 "ciw<CTRL-r>="60\*60\*24 "<Enter>"
4. 在下一行,进入插入模式,并使用 4. 在下一行,进入插入模式,并使用
`<CTRL-r>=`{normal}`system('date')`{vim} `<Enter>`{normal} 来添加今天的日期。 "<CTRL-r>=""system('date') <Enter>" 来添加今天的日期。
NOTE: 所有对 `system` 的调用都依赖于操作系统,例如在 Windows 上应使用 NOTE: 所有对 `system` 的调用都依赖于操作系统,例如在 Windows 上应使用
`system('date /t')`{vim}`:r!date /t`{vim} "system('date /t')"":r!date /t"
I have forgotten the exact number of seconds in a day, is it 84600? I have forgotten the exact number of seconds in a day, is it 84600?
Today's date is: ---> Today's date is:
NOTE: 同样效果也可以通过 `:pu=`{normal}`system('date')`{vim} 实现, NOTE: 同样效果也可以通过 ":pu=""system('date')" 实现,
或者用更少的按键 `:r!date`{vim} 或者用更少的按键 ":r!date"
参考:[表达式寄存器](quote=) 参考:表达式寄存器
# 第 2.1.3 课:数字寄存器 # 第 2.1.3 课:数字寄存器
** 按下 `yy`{normal}`dd`{normal} 来观察它们对寄存器的影响 ** ** 按下 "yy""dd" 来观察它们对寄存器的影响 **
1. 将光标移动到下面标有 的那一行。 1. 将光标移动到下面标有 "--->" 的那一行。
2. 复制yank第 0 行,然后用 `:reg`{vim} `<Enter>`{normal} 查看寄存器。 2. 复制yank第 0 行,然后用 ":reg <Enter>" 查看寄存器。
3. 用 `"cdd`{normal} 删除第 0 行,然后再次查看寄存器。 3. 用 ""cdd" 删除第 0 行,然后再次查看寄存器。
(你觉得第 0 行的内容会出现在哪里?) (你觉得第 0 行的内容会出现在哪里?)
4. 继续删除后续的每一行,并在每次删除后用 `:reg`{vim} 查看寄存器。 4. 继续删除后续的每一行,并在每次删除后用 ":reg" 查看寄存器。
NOTE: 你应该会发现,当新的整行删除内容被添加进来时,之前删除的内容会在寄存器列 NOTE: 你应该会发现,当新的整行删除内容被添加进来时,之前删除的内容会在寄存器列
表中依次下移。 表中依次下移。
5. 现在,按顺序 (p)aste粘贴以下寄存器中的内容c, 7, 4, 8, 2。例如使用 `"7p`{normal} 5. 现在,按顺序 (p)aste粘贴以下寄存器中的内容c, 7, 4, 8, 2。例如使用 ""7p"
0. This ---> 0. This
9. wobble 9. wobble
8. secret 8. secret
7. is 7. is
@@ -98,10 +98,10 @@ NOTE: 你应该会发现,当新的整行删除内容被添加进来时,之
1. tribute 1. tribute
NOTE: 在数字寄存器中,整行删除(`dd`{normal})的内容比整行复制或涉及更小范围移动 NOTE: 在数字寄存器中,整行删除("dd")的内容比整行复制或涉及更小范围移动
的删除操作“存活”得更久。 的删除操作“存活”得更久。
参考:[数字寄存器](quote0) 参考:数字寄存器
# 第 2.1.4 课:标记之美 # 第 2.1.4 课:标记之美
@@ -109,27 +109,27 @@ NOTE: 在数字寄存器中,整行删除(`dd`{normal})的内容比整行
** 避免“码农式”的行号计算 ** ** 避免“码农式”的行号计算 **
NOTE: 在写代码时,一个常见的难题是移动大块的代码。 NOTE: 在写代码时,一个常见的难题是移动大块的代码。
下面的技巧可以帮助你避免进行行号计算,比如 `"a147d`{normal}`:945,1091d a`{vim} 下面的技巧可以帮助你避免进行行号计算,比如 ""a147d"":945,1091d a"
甚至是更麻烦的先用 `i<CTRL-r>=`{normal}1091-945 `<Enter>`{normal} 计算行数。 甚至是更麻烦的先用 "i<CTRL-r>="1091-945 "<Enter>" 计算行数。
1. 将光标移动到下面标有 的那一行。 1. 将光标移动到下面标有 "--->" 的那一行。
2. 跳转到函数的第一行,并用 `ma`{normal} 将其标记为 a。 2. 跳转到函数的第一行,并用 "ma" 将其标记为 a。
NOTE: 光标在该行的确切位置并不重要! NOTE: 光标在该行的确切位置并不重要!
3. 使用 `$%`{normal} 导航到行尾,然后再到代码块的末尾。 3. 使用 "$%" 导航到行尾,然后再到代码块的末尾。
4. 使用 `"ad'a`{normal} 将该代码块删除并存入寄存器 a。 4. 使用 ""ad'a" 将该代码块删除并存入寄存器 a。
**助记***将从光标位置到包含标记('(a) 的那一行的内容 (d)elete删除到名为 (a) 的寄存器(")中* **助记***将从光标位置到包含标记('(a) 的那一行的内容 (d)elete删除到名为 (a) 的寄存器(")中*
5. 在 BBB 和 CCC 之间用 `"ap`{normal} 粘贴该代码块。 5. 在 BBB 和 CCC 之间用 ""ap" 粘贴该代码块。
NOTE: 多次练习这个操作以达到熟练:`ma$%"ad'a`{normal} NOTE: 多次练习这个操作以达到熟练:"ma$%"ad'a"
~~~ cmd ~~~ cmd
AAA ---> AAA
function itGotRealBigRealFast() { function itGotRealBigRealFast() {
if ( somethingIsTrue ) { if ( somethingIsTrue ) {
doIt() doIt()
@@ -149,29 +149,29 @@ CCC
NOTE: 标记和寄存器不共享命名空间,因此寄存器 a 和标记 a 是完全独立的。 NOTE: 标记和寄存器不共享命名空间,因此寄存器 a 和标记 a 是完全独立的。
但寄存器和宏并非如此。 但寄存器和宏并非如此。
参考:[标记](marks) 参考:标记
[标记移动](mark-motions)' 和 \` 的区别) 标记移动(' 和 \` 的区别)
# 第 2.1 课总结 # 第 2.1 课总结
1. 将文本 存储(复制、删除)到 26 个寄存器a-z并从中提取粘贴出来。 1. 将文本 存储(复制、删除)到 26 个寄存器a-z并从中提取粘贴出来。
2. 从单词内的任意位置复制整个单词:`yiw`{normal} 2. 从单词内的任意位置复制整个单词:"yiw"
3. 从单词内的任意位置更改整个单词:`ciw`{normal} 3. 从单词内的任意位置更改整个单词:"ciw"
4. 在插入模式下直接从寄存器插入文本:`<CTRL-r>a`{normal} 4. 在插入模式下直接从寄存器插入文本:"<CTRL-r>a"
5. 插入简单算术运算的结果: 5. 插入简单算术运算的结果:
在插入模式下使用 `<CTRL-r>=`{normal}60\*60 `<Enter>`{normal} 在插入模式下使用 "<CTRL-r>="60\*60 "<Enter>"
6. 插入系统调用的结果: 6. 插入系统调用的结果:
在插入模式下使用 `<CTRL-r>=`{normal}`system('ls -1')`{vim} 在插入模式下使用 "<CTRL-r>=""system('ls -1')"
7. 使用 `:reg`{vim} 查看寄存器。 7. 使用 ":reg" 查看寄存器。
8. 了解整行删除 (`dd`{normal}) 的最终去向:在数字寄存器中,即从寄存器 1 到 9 8. 了解整行删除 ("dd") 的最终去向:在数字寄存器中,即从寄存器 1 到 9
依次向下存放。要理解整行删除的内容在数字寄存器中比任何其他操作都保存得更久。 依次向下存放。要理解整行删除的内容在数字寄存器中比任何其他操作都保存得更久。
9. 了解所有复制操作在数字寄存器中的最终去向,以及它们是多么“短暂易逝”。 9. 了解所有复制操作在数字寄存器中的最终去向,以及它们是多么“短暂易逝”。
10. 在普通模式下设置标记:`m[a-zA-Z0-9]`{normal} 10. 在普通模式下设置标记:"m[a-zA-Z0-9]"
11. 按行移动到标记位置:`'`{normal} 11. 按行移动到标记位置:"'"
# 结语 # 结语

View File

@@ -1,10 +1,6 @@
{ {
"expect": { "expect": {
"35": -1,
"36": "b) In this capacity, Edward will have sole cookie discretionary powers", "36": "b) In this capacity, Edward will have sole cookie discretionary powers",
"62": "I have forgotten the exact number of seconds in a day, is it 86400", "62": "I have forgotten the exact number of seconds in a day, is it 86400"
"63": -1,
"89": -1,
"132": -1
} }
} }

View File

@@ -40,28 +40,28 @@ describe(':Tutor', function()
{0: } | {0: } |
{0: }{1:NOTE}: You can also read the output of an external command. For example, | {0: }{1:NOTE}: You can also read the output of an external command. For example, |
{0: } | {0: } |
{0: } :r {4:!}dir | {0: } ":r !dir" |
{0: } | {0: } |
{0: } reads the output of the ls command and puts it below the cursor. | {0: } reads the output of the ls command and puts it below the cursor. |
{0: } | {0: } |
{0: }{3:#}{5: Lesson 5 SUMMARY} | {0: }{3:#}{5: Lesson 5 SUMMARY} |
{0: } | {0: } |
{0: } 1. {2::!command} executes an external command. | {0: } 1. :!command executes an external command. |
{0: } | {0: } |
{0: } Some useful examples are: | {0: } Some useful examples are: |
{0: } :{4:!}dir - shows a directory listing | {0: } ":!dir" - shows a directory listing |
{0: } :{4:!}del FILENAME - removes file FILENAME | {0: } ":!del FILENAME" - removes file FILENAME |
{0: } | {0: } |
{0: } 2. {2::w} FILENAME writes the current Neovim file to disk with | {0: } 2. :w FILENAME writes the current Neovim file to disk with |
{0: } name FILENAME. | {0: } name FILENAME. |
{0: } | {0: } |
{0: } 3. {2:v} motion :w FILENAME saves the Visually selected lines in file | {0: } 3. v motion :w FILENAME saves the Visually selected lines in file |
{0: } FILENAME. | {0: } FILENAME. |
{0: } | {0: } |
{0: } 4. {2::r} FILENAME retrieves disk file FILENAME and puts it | {0: } 4. :r FILENAME retrieves disk file FILENAME and puts it |
{0: } below the cursor position. | {0: } below the cursor position. |
{0: } | {0: } |
{0: } 5. {2::r !dir} reads the output of the dir command and | {0: } 5. :r !dir reads the output of the dir command and |
{0: } puts it below the cursor position. | {0: } puts it below the cursor position. |
{0: } | {0: } |
]] ]]
@@ -72,28 +72,28 @@ describe(':Tutor', function()
{0: } | {0: } |
{0: }{1:NOTE}: You can also read the output of an external command. For example, | {0: }{1:NOTE}: You can also read the output of an external command. For example, |
{0: } | {0: } |
{0: } :r {4:!}ls | {0: } ":r !ls" |
{0: } | {0: } |
{0: } reads the output of the ls command and puts it below the cursor. | {0: } reads the output of the ls command and puts it below the cursor. |
{0: } | {0: } |
{0: }{3:#}{5: Lesson 5 SUMMARY} | {0: }{3:#}{5: Lesson 5 SUMMARY} |
{0: } | {0: } |
{0: } 1. {2::!command} executes an external command. | {0: } 1. :!command executes an external command. |
{0: } | {0: } |
{0: } Some useful examples are: | {0: } Some useful examples are: |
{0: } :{4:!}ls - shows a directory listing | {0: } ":!ls " - shows a directory listing |
{0: } :{4:!}rm FILENAME - removes file FILENAME | {0: } ":!rm FILENAME" - removes file FILENAME |
{0: } | {0: } |
{0: } 2. {2::w} FILENAME writes the current Neovim file to disk with | {0: } 2. :w FILENAME writes the current Neovim file to disk with |
{0: } name FILENAME. | {0: } name FILENAME. |
{0: } | {0: } |
{0: } 3. {2:v} motion :w FILENAME saves the Visually selected lines in file | {0: } 3. v motion :w FILENAME saves the Visually selected lines in file |
{0: } FILENAME. | {0: } FILENAME. |
{0: } | {0: } |
{0: } 4. {2::r} FILENAME retrieves disk file FILENAME and puts it | {0: } 4. :r FILENAME retrieves disk file FILENAME and puts it |
{0: } below the cursor position. | {0: } below the cursor position. |
{0: } | {0: } |
{0: } 5. {2::r !ls} reads the output of the ls command and | {0: } 5. :r !ls reads the output of the ls command and |
{0: } puts it below the cursor position. | {0: } puts it below the cursor position. |
{0: } | {0: } |
]] ]]
@@ -105,7 +105,7 @@ describe(':Tutor', function()
it('applies hyperlink highlighting', function() it('applies hyperlink highlighting', function()
local expected = [[ local expected = [[
{0: }^This concludes Chapter 1 of the Vim Tutor. Consider continuing with | {0: }^This concludes Chapter 1 of the Vim Tutor. Consider continuing with |
{0: }{2:Chapter 2}. | {0: }Chapter 2. |
{0: } | {0: } |
{0: }This was intended to give a brief overview of the Neovim editor, just enough to| {0: }This was intended to give a brief overview of the Neovim editor, just enough to|
{0: }allow you to use it fairly easily. It is far from complete as Neovim has | {0: }allow you to use it fairly easily. It is far from complete as Neovim has |
@@ -146,18 +146,18 @@ describe(':Tutor', function()
screen:expect([[ screen:expect([[
{0: }{3:^#}{5: Lesson 2.6: OPERATING ON LINES} | {0: }{3:^#}{5: Lesson 2.6: OPERATING ON LINES} |
{0: } | {0: } |
{0: }{1: Type }{4:dd}{1: to delete a whole line. } | {0: }{1: Type "dd" to delete a whole line. } |
{0: } | {0: } |
{0: }Due to the frequency of whole line deletion, the designers of Vi decided | {0: }Due to the frequency of whole line deletion, the designers of Vi decided |
{0: }it would be easier to simply type two d's to delete a line. | {0: }it would be easier to simply type two d's to delete a line. |
{0: } | {0: } |
{0: } 1. Move the cursor to the second line in the phrase below. | {0: } 1. Move the cursor to the second line in the phrase below. |
{0: } | {0: } |
{0: } 2. Type {2:dd} to delete the line. | {0: } 2. Type dd to delete the line. |
{0: } | {0: } |
{0: } 3. Now move to the fourth line. | {0: } 3. Now move to the fourth line. |
{0: } | {0: } |
{0: } 4. Type {9:2}{4:dd} to delete two lines. | {0: } 4. Type "2dd" to delete two lines. |
{0: } | {0: } |
{7:✓ }{3:1) Roses are red, }| {7:✓ }{3:1) Roses are red, }|
{11:✗ }{3:2) Mud is fun, }| {11:✗ }{3:2) Mud is fun, }|
@@ -169,29 +169,29 @@ describe(':Tutor', function()
{0: } | {0: } |
{0: }{3:#}{5: Lesson 2.7: THE UNDO COMMAND} | {0: }{3:#}{5: Lesson 2.7: THE UNDO COMMAND} |
{0: } | {0: } |
{0: }{1: Press }{4:u}{1: to undo the last commands, }{4:U}{1: to fix a whole line. } | {0: }{1: Press "u" to undo the last commands, "U" to fix a whole line. } |
{0: } | {0: } |
{0: } 1. Move the cursor to the line below marked {10:✗} and place it on the first error.| {0: } 1. Move the cursor to the line below marked {10:✗} and place it on the first error.|
{0: } | {0: } |
{0: } 2. Type {4:x} to delete the first unwanted character. | {0: } 2. Type "x" to delete the first unwanted character. |
]]) ]])
feed('<Cmd>310<CR>dd<Cmd>311<CR>2dd') feed('<Cmd>310<CR>dd<Cmd>311<CR>2dd')
screen:expect([[ screen:expect([[
{0: }{3:#}{5: Lesson 2.6: OPERATING ON LINES} | {0: }{3:#}{5: Lesson 2.6: OPERATING ON LINES} |
{0: } | {0: } |
{0: }{1: Type }{4:dd}{1: to delete a whole line. } | {0: }{1: Type "dd" to delete a whole line. } |
{0: } | {0: } |
{0: }Due to the frequency of whole line deletion, the designers of Vi decided | {0: }Due to the frequency of whole line deletion, the designers of Vi decided |
{0: }it would be easier to simply type two d's to delete a line. | {0: }it would be easier to simply type two d's to delete a line. |
{0: } | {0: } |
{0: } 1. Move the cursor to the second line in the phrase below. | {0: } 1. Move the cursor to the second line in the phrase below. |
{0: } | {0: } |
{0: } 2. Type {2:dd} to delete the line. | {0: } 2. Type dd to delete the line. |
{0: } | {0: } |
{0: } 3. Now move to the fourth line. | {0: } 3. Now move to the fourth line. |
{0: } | {0: } |
{0: } 4. Type {9:2}{4:dd} to delete two lines. | {0: } 4. Type "2dd" to delete two lines. |
{0: } | {0: } |
{7:✓ }{3:1) Roses are red, }| {7:✓ }{3:1) Roses are red, }|
{7:✓ }{3:3) Violets are blue, }| {7:✓ }{3:3) Violets are blue, }|
@@ -200,13 +200,13 @@ describe(':Tutor', function()
{0: } | {0: } |
{0: }{3:#}{5: Lesson 2.7: THE UNDO COMMAND} | {0: }{3:#}{5: Lesson 2.7: THE UNDO COMMAND} |
{0: } | {0: } |
{0: }{1: Press }{4:u}{1: to undo the last commands, }{4:U}{1: to fix a whole line. } | {0: }{1: Press "u" to undo the last commands, "U" to fix a whole line. } |
{0: } | {0: } |
{0: } 1. Move the cursor to the line below marked {10:✗} and place it on the first error.| {0: } 1. Move the cursor to the line below marked {10:✗} and place it on the first error.|
{0: } | {0: } |
{0: } 2. Type {4:x} to delete the first unwanted character. | {0: } 2. Type "x" to delete the first unwanted character. |
{0: } | {0: } |
{0: } 3. Now type {4:u} to undo the last command executed. | {0: } 3. Now type "u" to undo the last command executed. |
{0: } | {0: } |
]]) ]])
end) end)
@@ -217,14 +217,14 @@ describe(':Tutor', function()
screen:expect([[ screen:expect([[
{0: }{3:^#}{5: Lesson 1.3: TEXT EDITING: DELETION} | {0: }{3:^#}{5: Lesson 1.3: TEXT EDITING: DELETION} |
{0: } | {0: } |
{0: }{1: Press }{4:x}{1: to delete the character under the cursor. } | {0: }{1: Press "x" to delete the character under the cursor. } |
{0: } | {0: } |
{0: } 1. Move the cursor to the line below marked {10:✗}. | {0: } 1. Move the cursor to the line below marked {10:✗}. |
{0: } | {0: } |
{0: } 2. To fix the errors, move the cursor until it is on top of the | {0: } 2. To fix the errors, move the cursor until it is on top of the |
{0: } character to be deleted. | {0: } character to be deleted. |
{0: } | {0: } |
{0: } 3. Press {2:the x key} to delete the unwanted character. | {0: } 3. Press the x key to delete the unwanted character. |
{0: } | {0: } |
{0: } 4. Repeat steps 2 through 4 until the sentence is correct. | {0: } 4. Repeat steps 2 through 4 until the sentence is correct. |
{0: } | {0: } |
@@ -238,7 +238,7 @@ describe(':Tutor', function()
{0: } | {0: } |
{0: }{3:#}{5: Lesson 1.4: TEXT EDITING: INSERTION} | {0: }{3:#}{5: Lesson 1.4: TEXT EDITING: INSERTION} |
{0: } | {0: } |
{0: }{1: Press }{12:i}{1: to insert text. } | {0: }{1: Press "i" to insert text. } |
{0: } | {0: } |
{0: } 1. Move the cursor to the first line below marked {10:✗}. | {0: } 1. Move the cursor to the first line below marked {10:✗}. |
{0: } | {0: } |
@@ -255,14 +255,14 @@ describe(':Tutor', function()
screen:expect([[ screen:expect([[
{0: }{3:#}{5: Lesson 1.3: TEXT EDITING: DELETION} | {0: }{3:#}{5: Lesson 1.3: TEXT EDITING: DELETION} |
{0: } | {0: } |
{0: }{1: Press }{4:x}{1: to delete the character under the cursor. } | {0: }{1: Press "x" to delete the character under the cursor. } |
{0: } | {0: } |
{0: } 1. Move the cursor to the line below marked {10:✗}. | {0: } 1. Move the cursor to the line below marked {10:✗}. |
{0: } | {0: } |
{0: } 2. To fix the errors, move the cursor until it is on top of the | {0: } 2. To fix the errors, move the cursor until it is on top of the |
{0: } character to be deleted. | {0: } character to be deleted. |
{0: } | {0: } |
{0: } 3. Press {2:the x key} to delete the unwanted character. | {0: } 3. Press the x key to delete the unwanted character. |
{0: } | {0: } |
{0: } 4. Repeat steps 2 through 4 until the sentence is correct. | {0: } 4. Repeat steps 2 through 4 until the sentence is correct. |
{0: } | {0: } |
@@ -276,7 +276,7 @@ describe(':Tutor', function()
{0: } | {0: } |
{0: }{3:#}{5: Lesson 1.4: TEXT EDITING: INSERTION} | {0: }{3:#}{5: Lesson 1.4: TEXT EDITING: INSERTION} |
{0: } | {0: } |
{0: }{1: Press }{12:i}{1: to insert text. } | {0: }{1: Press "i" to insert text. } |
{0: } | {0: } |
{0: } 1. Move the cursor to the first line below marked {10:✗}. | {0: } 1. Move the cursor to the first line below marked {10:✗}. |
{0: } | {0: } |