From 1a336bdd5802be9565c0b3a1c1ec7783b0512e07 Mon Sep 17 00:00:00 2001 From: Erasin Date: Tue, 27 Dec 2022 12:46:36 +0800 Subject: [PATCH] Add locale language support for tutor - Added Chinese Simplified tutor file --- helix-term/src/commands/typed.rs | 22 +- helix-term/src/ui/mod.rs | 46 ++ runtime/tutors/zh_cn | 1105 ++++++++++++++++++++++++++++++ 3 files changed, 1169 insertions(+), 4 deletions(-) create mode 100644 runtime/tutors/zh_cn diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index c3a7c9faabd90..a0ab5bda687b2 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -1398,15 +1398,29 @@ fn debug_remote( fn tutor( cx: &mut compositor::Context, - _args: &[Cow], + args: &[Cow], event: PromptEvent, ) -> anyhow::Result<()> { if event != PromptEvent::Validate { return Ok(()); } - let path = helix_loader::runtime_dir().join("tutor"); - cx.editor.open(&path, Action::Replace)?; + let default_tutor = helix_loader::runtime_dir().join("tutor"); + + let path = if args.is_empty() { + None + } else { + let name = args[0].to_lowercase(); + if name.eq("default") { + None + } else { + let p = helix_loader::runtime_dir().join("tutors").join(&name); + (p.exists()).then(|| p) + } + }; + + cx.editor + .open(&path.unwrap_or(default_tutor), Action::Replace)?; // Unset path to prevent accidentally saving to the original tutor file. doc_mut!(cx.editor).set_path(None)?; Ok(()) @@ -2225,7 +2239,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[ aliases: &[], doc: "Open the tutorial.", fun: tutor, - completer: None, + completer: Some(completers::tutor), }, TypableCommand { name: "goto", diff --git a/helix-term/src/ui/mod.rs b/helix-term/src/ui/mod.rs index ade1d8cf4c7f8..c7d1605f23e5f 100644 --- a/helix-term/src/ui/mod.rs +++ b/helix-term/src/ui/mod.rs @@ -280,6 +280,52 @@ pub mod completers { names } + pub fn tutor(_editor: &Editor, input: &str) -> Vec { + let mut names: Vec = std::fs::read_dir(&helix_loader::runtime_dir().join("tutors")) + .map(|entries| { + entries + .filter_map(|entry| { + entry.ok().and_then(|entry| { + Some( + entry + .path() + .file_stem() + .unwrap() + .to_string_lossy() + .into_owned(), + ) + }) + }) + .collect() + }) + .unwrap_or_default(); + + names.push("default".into()); + names.sort(); + names.dedup(); + + let mut names: Vec<_> = names + .into_iter() + .map(|name| ((0..), Cow::from(name))) + .collect(); + + let matcher = Matcher::default(); + + let mut matches: Vec<_> = names + .into_iter() + .filter_map(|(_range, name)| { + matcher.fuzzy_match(&name, input).map(|score| (name, score)) + }) + .collect(); + + matches.sort_unstable_by(|(name1, score1), (name2, score2)| { + (Reverse(*score1), name1).cmp(&(Reverse(*score2), name2)) + }); + names = matches.into_iter().map(|(name, _)| ((0..), name)).collect(); + + names + } + pub fn theme(_editor: &Editor, input: &str) -> Vec { let mut names = theme::Loader::read_names(&helix_loader::runtime_dir().join("themes")); names.extend(theme::Loader::read_names( diff --git a/runtime/tutors/zh_cn b/runtime/tutors/zh_cn new file mode 100644 index 0000000000000..9550a4b522cd0 --- /dev/null +++ b/runtime/tutors/zh_cn @@ -0,0 +1,1105 @@ + _ _ __ __ + | | | | _ \ \ / / + | |_| | ___ | | (_) \ \/ / + | _ | / _ \ | | _ ) ( + | | | | | __/ | | | | / /\ \ + |_| |_| \___| |_| |_| /_/ \_\ + + 一个后现代模态文本编辑器 + version 22.12 + +_________________________________________________________________ + + 欢迎使用 Helix 编辑器!Helix 不同于其他的编辑器,它是有模态的, + 也就是它在编辑文本的时候有不同的模式,最常用的模式有普通模式 +(Normal mode)和插入模式(Insert mode)。普通模式下您输入的按键 + 实际上不会输入任何文本,而会对文本进行各种操作。这样可让您进行 + 更加高效率的操作。本教程将教您如何使用 Helix 的模态编辑功能。 + + 现在,现在请确保您的 CapsLock (大小写锁定键) 没有被按下,然后 + 按下 j 键,直到第一节课的内容完全显示。 + + + + + + + + + + +================================================================= += 1.1 基础的光标移动 = +================================================================= + + ↑ + k * h 向左移动 + ← h l → * l 向右移动 + j * j 向下移动 + ↓ * k 向上移动 + + 在helix中使用 h,j,k,l 移动光标,如上图所示,也可以使用上下左右键 + 来移动光标。但是使用 hjkl 更加的便捷,试着使用 hjkl 来移动光标, + 之后按 j 键移动下一节课程。 + + + + + + + + +================================================================= += 1.2 退出 HELIX = +================================================================= + + 1. 输入 : (冒号,hx 使用的是英文半角符号) 进入命令模式,可以发现 + 光标进入了窗口的底部。 + 2. 输入 q 或者 quit,然后回车就可以退出 Helix 了。 + + 提示:如果有存在未保存的文件的时候,退出命令将失效。如果想要放弃 + 文件的更改,可以使用 q! 或者 quit! 进行强制退出。稍后您将 + 学习到如何保存文件。 + + 可以通过输入 Esc 键退出命令模式。 + + 现在,可以进入下一课了。 + + + + + + + +================================================================= += 1.3 删除操作 = +================================================================= + + 键入 d 键可以删除光标下的字符。 + + 1. 移动光标到下面标记 '-->' 位置。 + 2. 对照下方的一行,移动光标找到额外的字符,并使用 d 删除。 + + --> Thhiss senttencee haass exxtra charracterss. + This sentence has extra characters. + + 如果两行句子对照后一致的话,我们就可以进入下一节课了。 + + + + + + + + +================================================================= += 1.4 插入模式 = +================================================================= + + 键入 i 键可以进入插入模式(Insert Mode)。 + + 1. 移动光标到下面标记 '-->' 位置。 + 2. 对照下一行的文本,移动光标到文本缺少的位置,然后键入 i 进入 + 插入模式,就可以开始输入字符了。 + 3. 输入缺少的文本内容。 + 4. 使用 Esc 键退出插入模式,会自动切换为普通模式。 + 5. 重复练习,直到与下一行的内容对照一致。 + + + --> Th stce misg so. + This sentence is missing some text. + + 提示:在编辑器底部的状态栏会显示当前的状态模式。 + 当键入 i 的时候,可以看到 NOR 变为了 INS。 + + + + +================================================================= += 1.5 保存文件 = +================================================================= + + 键入 :w / :write 可以保存当前的文件。 + + 1. 现在可以使用 :q! 强制离开,或者新开一个终端窗口。 + 2. 使用 Helix 打开已个文件,在终端中输入 hx 文件名称。 + 3. 打开后文件后,现在在编辑器中输入一些内容。 + 4. 键入 : 进入命令模式。 + 5. 继续键入 w 或者 write ,然后回车就可以将内容保存到文件了。 + + 您也可以使用 wq 或者 write-quit 命令来保存后退出。 + + 提示:您可以在 w / write 命令后跟随输入任意文件地址进行另存为 + 自定义的路径。 + 提示:如果当前文件包含没有保存的内容,在状态栏显示文件名称的位置 + 会追加 [+] 的字符来提示文件未保存。 + + + +================================================================= += 章节 1 概要 = +================================================================= + + * 使用 h,j,k,l 键移动光标。 + + * 键入 : 进入命令模式 + * 使用 q / quit 和 q! / quit! 命令退出 Helix。前者会在文件未保 + 存的时候失败,而后者会直接忽略未保存的文件。 + * 使用 w / write 命令来保存文件。 + * 使用 wq / write-quit 命令保存并退出。 + + * 键入 d 可以删除光标下的字符。 + + * 键入 i 可以进入插入模式后输入文本,使用 Esc 返回到普通模式。 + + + + + + + +================================================================= += 2.1 插入命令 = +================================================================= + + 如上所述,您可以在光标所在的位置键入 i 进入插入模式。下面介绍几 + 种在不同位置进入插入模式的方式。 + + 常用的插入命令有: + i - 在选区的前面进入插入模式。 + a - 在选区的后面进入插入模式(这里是扩展选区的意思)。 + I - 在行的最前方进入插入模式。 + A - 在行的最后方进入插入模式。 + + 1. 移动光标到下面标记 '-->' 位置。 + 2. 键入 A (Shift + a),你的光标会移动到行尾进入插入模式。 + 3. 输入内容直到和对照内容一致。 + + --> This sentence is miss + This sentence is missing some text. + + + +================================================================= += 2.2 新建行 = +================================================================= + + 键入 o 会在光标所在位置的下方新建一行,并进入插入模式。 + 键入 O 会在光标所在位置的上方新建一行,并进入插入模式。 + + 1. 移动光标到下面标记 '-->' 位置。 + 2. 键入 o 新建一行并输入您的答案。 + + --> What is the best editor? + 你觉得最棒的编辑器是? + + + + + + + + + + + +================================================================= += 章节 2 概要 = +================================================================= + + * 键入 a 可以追加选区内容。 + + * 键入 I 光标会移动到行首第一个空白字符并进入插入模式。 + + * 键入 A 会在行尾进入插入模式。 + + * 使用 o 和 O 将会在光标下方和上方创建新的行。 + + + + + + + + + + +================================================================= += 3.1 移动命令和选区 = +================================================================= + + 键入 w 会选择内容直到下一个单词的开头之前。 + + 实际上,光标可以理解为单个字符的选择区(selection),之前学习的 + d 键删除并非是光标下的字符,而是删除选区中的内容。 + + 1. 移动光标到下面标记 '-->' 位置。 + 2. 移动光标到所需要删除单词的起始位置。 + 3. 键入 w 可以看到选择了单词直到下个单词的开头之前的位置。 + 4. 键入 d 删除所选择的内容。 + 5. 重复操作,删除多余的单词,直到和对照内容一致。 + + --> This sentence pencil has vacuum extra words in the it. + This sentence has extra words in it. + + + + +================================================================= += 3.2 常用移动命令 = +================================================================= + + 上一节,我们可以看到键入 w 后,光标会从所在位置移动到下个单词的 + 开始位置,会自动选择光标遍历的内容。这种围绕单词的移动操作非常有 + 利于选择单词并对其进行操作。 + + 常用的移动操作包括: + w - 向前移动光标直到下个单词开头之前。 + e - 向前移动光标直到当前单词的末尾。 + b - 向后移动光标直到当前单词的开头。 + + 单词移动 w,e,b 移动操作有对应 W,E,B,它们遍历的内容包括单词和一 + 些其他的分割字符,比如标点符号(英文半角)。而单词移动会把其他符号 + 也看做单词,除了空白。 + + 当然,这些移动操作都会自动选择光标遍历的文本内容。 + + + + + +================================================================= += 3.3 更改命令 = +================================================================= + + 键入 c 可以修改当前的选区。 + + 该更改命令会删除当前选区并进入插入模式,可以看作 di 的快捷命令。 + + 1. 移动光标到下面标记 '-->' 位置。 + 2. 移动光标到错误单词的开始位置,键入 w 进行选择。 + 3. 键入 c 删除该单词并进入插入模式。 + 4. 输入正确的单词。 + 5. 重复操作,直到和下一行的对照内容一致。 + + --> This paper has heavy words behind it. + This sentence has incorrect words in it. + + + + +================================================================= += 3.4 计数重复移动操作 = +================================================================= + + 在移动动作前输入数字可以让它重复操作多次。 + + + 1. 移动光标到下面标记 '-->' 位置。 + 2. 键入 2w 向前移动到第二个单词末尾。 + 3. 键入 3e 向前移动到之后第三个单词的词尾。 + 4. 键入 2b 向后移动两个单词。 + 5. 试着输入和上面不同的数字的操作,然后观察变动。 + + --> This is just a line with words you can move around in. + + + + + + + + + +================================================================= += 3.5 选择模式 / 扩展模式 = +================================================================= + + 键入 v 进入选择模式。 + 键入 v 后输入 Esc 可以返回普通模式。 + 在选择模式下,移动操作不会重置选择内容,而会扩展当前的选择内容。 + + 1. 移动光标到下面标记 '-->' 位置。 + 2. 移动光标到 FOO 的首字母,键入 v2w 就可以选择之后的两个单词。 + 3. 键入 d 可以删除当前的两个单词,可以看到 d 后返回到普通模式。 + 4. 移动光标到 BAZ 的首字母,然后重复之前的操作。 + + --> Remove the FOO BAR distracting words BAZ BIZ from this line. + + + + + + +================================================================= += 3.6 行选择 = +================================================================= + + 键入 x 可以选择整行,再键入 x 可以继续选择下一行。 + + 1. 移动光标到下方标记 '-->' 第二行。 + 2. 键入 x 选择当前行,然后键入 d 删除行。 + 3. 移动光标到第4行(这里是标记为4的行)。 + 4. 键入 x 两次或者键入 2x 选择两行,使用 d 删除选区。 + + --> 1) Roses are red, + --> 2) Mud is fun, + --> 3) Violets are blue, + --> 4) I have a car, + --> 5) Clocks tell time, + --> 6) Sugar is sweet, + --> 7) And so are you. + + 提示:X 命令和 x 很类似,不过该命令没有扩展到下一行的功能,对空 + 白行也不起作用。 + + + +================================================================= += 3.7 取消选区 = +================================================================= + + 键入 ; (分号)可以取消选区直到单个光标。 + + 有时,您希望在不移动光标(可能为多个光标)的情况下取消选择的内 + 容,使用 ; 键进行操作。 + + 1. 移动光标到下面标记 '-->' 的行。 + 2. 使用之前学习的移动操作或者选择模式进行选择,然后使用 ; 取消 + 所选的内容。 + + --> This is an error-free line with words to move around in. + + 提示:该操作在选择模式中也起作用。 + 提示:还有一个相关的命令 Alt-; 可以翻转选区。这里你可以观察下 + 光标位置的变动。 + + + + +================================================================= += 章节3 概要 = +================================================================= + + * 键入 w 光标向前移动选择直到下个单词。 + * 键入 e 向前选择到当前单词末尾 + * 键入 b 向后选择到当前单词首字母 + * 使用大写的 W,E,B 选择词汇 + + * 键入 d 删除选区 + * 键入 c 删除选区并进入插入模式 + + * 在移动操作前键入数字进行复数的操作。 + + * 键入 v 进入选择模式,可以使用移动操作扩展选区。 + + * 键入 x 选择当前行,继续键入 x 继续向下选择行。 + + * 键入 ; (分号) 取消选区到光标位置 + + + + +================================================================= += 4.1 撤销 = +================================================================= + + 键入 u 可以撤销之前操作。 + 键入 U 可以重做撤销的操作。 + + 1. 移动光标到下面标记 '-->' 的行。 + 2. 移动光标到错误的单词,然后键入 d 删除。 + 3. 键入 u 撤销你的删除操作。 + 4. 修复所有错误的单词。 + 5. 多次键入 u 撤销你的修复。 + 6. 多次键入 U 重做你撤销的修复。 + + --> Fiix the errors on thhis line and reeplace them witth undo. + Fix the errors on this line and replace them with undo. + + + + + + + + +================================================================= += 4.2 复制和粘贴文本 = +================================================================= + + 键入 y 来复制选区内容。 + 键入 p 将复制的内容粘贴到光标位置的后面。 + 键入 P 将复制的内容粘贴到光标位置的前面。 + + 1. 移动光标到下面标记 '-->' 的行。 + 确认您的光标在 banana 的首字母上。 + 2. 键入 w 选中单词 banana 然后键入 y 来复制选择的内容。 + 3. 移动光标到 2 和 3 中间键入 p 来粘贴内容。 + 4. 在 3 和 4 中间重复操作。 + + --> 1 banana 2 3 4 + 1 banana 2 banana 3 banana 4 + + 提示:当您删除(d)和修改(c)文本的时候,Helix 会自动复制修改的 + 内容到寄存器。使用 Alt-d / Alt-c 可以避免这种复制操作。 + 提示:默认情况下,Helix 不会共享复制的内容给系统的剪贴板。使用 + Space + y / p 可以在系统的剪贴板复制和粘贴内容。 + + 提示:y 这里是 yank (抽拉)首字母,意指将内容抽取到寄存器(可以 + 理解为剪贴板)。使用 yank 而非 copy 是来自 Vim 的历史原 + 因。教程第八节介绍寄存器,在这之前您可以理解为复制。 + + + +================================================================= += 4.3 在文件中搜索 = +================================================================= + + 键入 / 会从当前光标位置在当前文件中向前搜索,回车后确认搜索。 + 键入 n 会移动到下一个匹配的搜索内容。 + 键入 N 会移动到上一个匹配的搜索内容。 + + 1. 键入 / 然后输入单词,比如‘banana’。 + 2. 回车确认搜索。 + 3. 使用 n 和 N 循环导航匹配内容。 + + 搜索使用正则表达式,允许使用复杂的正则表达式匹配目标,您会在该 + 教程中学习到选择命令(select command)。 + + 提示:键入 ? (Shift-/) 可以向后方向搜索。 + 提示:与 Vim 不同,? 并不会搜索的方向,N 总是向后,n 总是向前。 + + + +================================================================= += 章节 4 概要 = +================================================================= + + * 键入 u 撤销。 键入 U 重做。 + + * 键入 y 复制文本,使用 p 粘贴文本。 + * 使用 Space + y 和 Space + p 在系统剪贴板上复制粘贴。 + + * 键入 / 在文件中向前搜索,使用 ? 向后搜索。 + * 使用 n 和 N 可以循环导航匹配内容。 + + + + + + + + + + +================================================================= += 5.1 多光标模式 = +================================================================= + + 键入 C 会在下一个合适行的位置复制光标。 + + 1. 移动光标到下面第一个标记 ‘-->’ 的行。 + 确保光标在 ‘-->’ 的后面的单词上。 + 2. 键入 C 在会自动在下一个适合的行上的位置复制光标。注意它跳过了 + 中间的行,现在键入的内容会影响所有光标所在的位置。 + 3. 使用插入模式修复行内错误内容,两个光标会固定在两行同时处理。 + 4. 键入 , (逗号) 移除第二个光标。 + + --> Fix th two nes at same ime. + --> + --> Fix th two nes at same ime. + Fix these two lines at the same time. + + 提示:键入 Alt-C 会向上方向做同样的操作。 + +================================================================= += 5.2 选择命令 = +================================================================= + + 键入s 可以在选区中选择匹配内容。 + + 1. 移动光标到下面标记 ‘-->’ 的行。 + 2. 键入 x 选择行。 + 3. 键入 s. 会看到选中的提示。(这里 . 是正则表达式) + 4. 键入 apples 然后回车,会看到行中的 apples 都被选中。 + 这里已经多光标了。 + 5. 键入 c 修改 apples 为其他的东西,比如 oranges 。 + 6. 键入 Esc 退出插入模式。 + 7. 键入 , 移除其余的光标。 + + --> I like to eat apples since my favorite fruit is apples. + I like to eat oranges since my favorite fruit is oranges. + + + + +================================================================= += 5.3 通过正则选择 = +================================================================= + + 和搜索功能一样,选择命令也支持正则表达式,不只是完全匹配。 + + 1. 移动光标到下面标记 ‘-->’ 的行。 + 2. 键入 x 选择行,键入 s 。 + 3. 键入 ' +' (这里是空格加号) 会自动匹配连续空格数量大于1的部分。 + 键入回车确认选择。 + 4. 键入 c 修改匹配内容为单个空格。 + 5. 键入 , 取消多光标模式。 + + --> This sentence has some extra spaces. + This sentence has some extra spaces. + + 提示:如果您想要查询并替换,使用选择命令也可以做到。使用 % 选择 + 整个文件的内容,然后执行上面的操作。 + + + + + + +================================================================= += 5.4 对齐选区 = +================================================================= + + 键入 & 可以向光标方向按列对齐选区内容。 + + 1. 移动光标到下面第一个标记 ‘-->’ 的行,确保光标在箭头后面空白 + 的位置。 + 2. 键入 C 4次,或者键入 4C 。 + 3. 键入 W 选择数字和括号。 + 4. 键入 & 对齐选中的词汇。 + + --> 97) lorem + --> 98) ipsum + --> 99) dolor + --> 100) sit + --> 101) amet + + 提示:& 只关心对齐选区的头部,也就是移动方向的末端(多光标所在的 + 位置),另外一段称作锚(author)。 + +================================================================= += 5.5 按行分割选区 = +================================================================= + + 键入 Alt-s 按换行符分割选区。 + + 1. 移动光标到下面表格首行。 + 2. 键入 6x 选择整个表格。 + 3. 键入 Alt-s 按行分割选区。 + 4. 键入& 对齐表格。 + + | FRUIT | AMOUNT | + |---------|--------| + | Apples | 8 | + | Bananas | 6 | + | Oranges | 3 | + | Donuts | 4 | + + + 提示:如果表格是非等长内容,可以使用选择命令 s 选择 ‘|’ 然后使 + 用 & 来对齐。 + + + +================================================================= += 章节 5 摘要 = +================================================================= + + * 键入 C 在下面合适的行的位置复制光标。 + 使用 Alt-C 则向上操作。 + + * 键入 x 可以在当前选区上正则匹配内容。 + + * 键入 & 来按列对齐选区。 + + * 键入 Alt-s 按行分割选区。 + + + + + + + + + +================================================================= += 6.1 单字符选择 = +================================================================= + + 键入 f<字符> 会选择并包括找到的字符。 + 键入 t<字符> 会做选择直到到字符前面的位置。(不包含字符) + 键入 F / T 会反方向上做同样的操作。 + + 1. 移动光标到下面标记 ‘-->’ 的行。确保光标在第一个破折号上。 + 2. 键入 f[ 选择到方括号。 + 3. 键入 d 删除您的选择区。 + 4. 到行末尾,使用 F] 重复操作。 + 5. 移动下一行标记 ‘-->’ 后面的位置。 + 6. 在这个句子上使用 t 和 T 操作删除破折号。 + + --> -----[Free this sentence of its brackets!]----- + --> ------Free this sentence of its dashes!------ + + 提示:和 Vim 不同,Helix 并没有限制这些命令在当前行上查询,它实 + 际上是在整个文件中搜索字符的。 + +================================================================= += 6.2 替换命令 = +================================================================= + + 键入 r<字符> 会将选区下内容提花为输入的字符。 + + 1. 移动到下方表格的第二行,确保光标在第一个 = 上。 + 2. 键入 t| (Shift-|) 选择整个 = 。 + 3. 键入 r- 替换这些内容为 - (破折号)。 + + + | Month | Days | + |=======|------| + | Jan | 31 | + | Feb | 28 | + | Mar | 31 | + | ... | ... | + + + + +================================================================= += 6.3 重复操作 = +================================================================= + + 键入 . 会重复最后一次的插入命令操作。 + 键入 Alt-. 会重复最后一次 f / t 选择操作。 + + 1. 移动光标到下方标记 ‘-->’ 的行。 + 2. 修改,插入或者扩展内容并用 . 来练习重复操作。 + 3. 试着使用 f / t 和 Alt-. 选择句子的内容。 + + --> This is some text for you to repeat things. You can repeat + insertions like changing words, or repeat selections like + f / t. + + + + + + + +================================================================= += 章节 6 摘要 = +================================================================= + + * 键入 f / F 来扩展选区并包含查询的字符。 + * 键入 t / T 扩展选区直到查询的字符(不包含)。 + + * 键入 r 将选区内容替换为输入字符。 + + * 键入 . 重复最后一次的插入操作。 + * 键入 Alt-. 重复最后一次 f / t 选择操作。 + + + + + + + + + + + +================================================================= += 7.1 替换为复制的内容 = +================================================================= + + 键入 R 会使用复制的内容替换当前选区内容。 + + 1. 移动光标到下方标记 ‘-->’ 的行。 + 2. 键入 w 选择 watermelons 然后键入 y 复制内容。 + 3. 继续 w 选择 oranges。 + 4. 键入 R 替换 oranges 为复制中的 watermelons。 + + + --> I like watermelons because oranges are refreshing. + I like watermelons because watermelons are refreshing. + + + + + + + + + +================================================================= += 7.2 合并行操作 = +================================================================= + + 键入 J 会将选区的所有行合并。 + + 1. 移动光标到下方标记 ‘-->’ 的行。 + 2. 键入 x 4次或者 4x 选择下面的4行内容。 + 3. 键入 J 合并这些行。 + + --> This sentence +is spilling over +onto other +lines. + + This sentence is spilling over onto other lines. + + + + + + +================================================================= += 7.3 行的缩进处理 = +================================================================= + + 键入 > 可以缩进行,键入 < 可以减少行缩进(悬挂缩进)。 + + 1. 移动光标到下方标记 ‘-->’ 的行。 + 2. 移动到第二行,键入 > 缩进处理。 + 3. 移动到第三行,键入 < 减少缩进。 + + --> These lines + are indented + very poorly. + + These lines + are indented + much better. + + + + + +================================================================= += 7.4 数字的递增与递减 = +================================================================= + + 键入 Ctrl-a 选区的数字会进行递增操作。 + 键入 Ctrl-x 选区的数字会进行递减操作。 + + 1. 移动光标到下面标记 ‘-->’ 的第三行。 + 2. 键入 Ctrl-a 对标记 2 的部分进行递增操作。 + 3. 同样对下面标记为 3 的进行处理。 + 4. 移动到标记 6 的位置,键入 Ctrl-x 递减处理。 + + --> 1) First point. + --> 2) Added point. + --> 2) Next point. + --> 3) Another point. + --> 6) Last point. + + 提示:如果光标下没有数字,光标会跳转该行的下一个数字并进行操作。 + + + + +================================================================= += 章节 7 概要 = +================================================================= + + * 键入 R 会使用寄存器中的内容替代选区。 + + * 键入 J 合并行。 + + * 键入 < 和 > 进行缩进和悬挂缩进行。 + + * 键入 Ctrl-a 递增所选的数字。 + * 键入 Ctrl-x 递减所选的数字。 + + + + + + + + + + +================================================================= += 8.1 寄存器 = +================================================================= + + 寄存器是一种用字符为标识,用于存储复制(抽取)文本内容的容器。 + 寄存器还用于存储最新的搜索词汇和宏操作,在下一章节中会有所介绍。 + + + 键入 "<字符> 将选择内容寄存到<字符>标记的寄存器。 + + 1. 移动光标到下面标记 ‘-->’ 的行。 + 2. 键入 w 选择 watermelons ,然后使用 y 复制(抽取)。 + 3. 键入 w 选择 bananas。 + 4. 现在注册标识 b 到寄存器,键入 "b 然后用 y 复制(抽取)。 + 5. 选择 mangoes 然后键入 R 会将其替换为 watermelons 。 + 6. 选择 pineapples 然后键入 "bR 会将其替换为 bananas 。 + + --> I like watermelons and bananas because my favorite fruits + are mangoes and pineapples. + + 提示:Helix 的一些操作比如复制,粘贴,搜索,宏都有默认的寄存器, + 在使用自定义的寄存器,可以在操作前先使用 " 选择寄存器。 + + +================================================================= += 8.2 宏 = +================================================================= + + 宏是一种记录想要重复的一组操作的方法。您还可以将宏记录到特定的 + 寄存器(默认是 @ )。 输入 Q 开始录制宏,编辑器底部看到提示, + 右侧会看到寄存器位置,默认是 ‘[@]’ 。再次键入 Q 会停止录制。 + 键入 q 会自动重复寄存器 @(默认)中的宏。 + + 1. 移动光标到下面第一个标记 ‘-->’ 的行。 + 确保您的光标在 > 上。 + 2. 键入 Q 开始录制宏。 + 3. 编辑当前行,直到和下面的对照内容一致。 + 4. 离开插入模式后,再次键入 Q 停止录制宏。 + 5. 移动光标移动到下面第二个 > 上。 + 6. 键入 q 执行宏。 + + --> ... sentence doesn't have it's first and last ... . + --> ... sentence doesn't have it's first and last ... . + This sentence doesn't have it's first and last word. + + 提示:要多次执行宏,可以追加数字比如 2q 。 + 提示:不想使用默认的 @ 的时候,先选择存储的寄存器,例如 "aQ 来 + 记录宏到寄存器 a 中。使用的时候也是一样,先选择寄存器,后 + 操作,例如 "a2q 来执行寄存器 a 中的宏两次。 + + +================================================================= += 章节 8 概要 = +================================================================= + + * 键入 " 选择不同的寄存器。 + + * 键入 Q 进行开始和停止录制宏,并注册到寄存器,默认是 @ 。 + + * 键入 q 会重复默认寄存器 @ 或者选择的寄存器中的宏。 + + + + + + + + + + + + +================================================================= += 9.1 使用搜索选择内容 = +================================================================= + + + 使用搜索 / 会自动存储到 寄存器 / 中。 + 使用 n 和 N 都指向寄存器 / ,这意味着我们不需要输入搜索就可以设 + 定该寄存器。 + + 键入 * 会自动设置选区内容到寄存器 / 中, (这里的 * 命令可以理解 + 为 /选区内容的快捷方式),也会设置为搜索项的选项。这将会复制主 + 选择,将在下一章节的循环选择中介绍。 + + 1. 移动光标到下面标记 ‘-->’ 的行。 + 2. 键入 e 选择 horse ,然后键入 * 。 + 3. 使用 n 和 N 来回切换该例子中的 horse 。 + + --> A horse is a horse, of course, of course, + --> And no one can talk to a horse of course. + + 提示:* 可以看作是 "/y 的快捷方式,真正的动作是将复制的选区内容 + 放入寄存器 / 中。 + + +================================================================= += 9.2 在匹配中追加选区 = +================================================================= + + 在选择模式(v)中使用 n 和 N 将不是仅移动光标,而是在每个匹配上追 + 加选新的选择。 + + 1. 移动光标到下面标记 ‘-->’ 的行。 + 2. 选择第一个 bat 然后键入 * 匹配搜索。 + 3. 键入 v 进入选择模式。 + 4. 键入 n 会选择另一个 bat。 + 5. 键入 c 或者 r 修改 bat 为 cat 。 + + --> Everybody wants to be a bat, + --> because a cat's the only bat + --> who knows where it's at. + + + + + +================================================================= += 9.3 使用跳转列表 = +================================================================= + + Helix 可以在光标跳跃移动的时候跟踪跳转(jumps),比如搜索或者lsp + 中函数定义调转,会将这些存储到跳转列表(jumplist)中。 + + 使用 Ctrl-s 手动保存当前位置到跳转列表中。 + + 使用 Ctrl-i ("in") 和 Ctrl-o ("out") 分别在跳转列表中向前和向后 + 移动。 + + 使用 Space j 可以打开跳转列表。 + + + 1. 在随意位置键入 Ctrl-s 。 + 2. 移动到该文件其他的位置。 + 3. 键入 Ctrl-o (一次) 返回到您刚刚保存的位置。 + + + + + +================================================================= += 章节 9 概要 = +================================================================= + + * 键入 * 可以设置搜索寄存器 / ,然后设置为主要选区。 + + * 在选择模式中键入 n / N 可以将每个匹配追加为新的选区。 + + * 键入 Ctrl-s 保存当前位置到跳转列表。 + * 键入 Ctrl-i 和 Ctrl-o 分别在跳转列表中向前和向后移动。 + + + + + + + + + + +================================================================= += 10.1 循环选区和删除选区 = +================================================================= + + 键入 ) 和 ( 分别向前和向后循环主要选择(多光标模式下)。 + + 键入 Alt-, 删除主要选区。 + + 1. 移动光标到下面标记 ‘-->’ 的行。 + 2. 使用 xx 或者 2x 选择两行。 + 3. 键入 s 进入搜索选择,输入 would 并回车。 + 4. 使用 ( 和 ) 循环主要选择,并使用 Alt-, 删除第二个 would 的 + 选择。 + 5. 键入 c wood 将剩下的 would 修改为 wood。 + + --> How much would would a wouldchuck chuck + --> if a wouldchuck could chuck would? + + + + +================================================================= += 10.2 循环多个选择的内容 = +================================================================= + + 键入 Alt-( 和 Alt-) 分别可以向前和向后循环多个选择中的内容。 + + 1. 移动光标到下面标记 ‘-->’ 的行。 + 2. 使用 xx 或者 2x 选择两行。 + 3. 键入 s 进入搜索选择,输入 through|water|know 并回车。 + 4. 使用 Alt-( 和 Alt-) 循环选中的内容。 + + --> Jumping through the water, + --> daring to know. + + + +================================================================= += 10.3 变更 = +================================================================= + + 键入 ~ 可以切换选区字母的大小写。 + 键入 ` 可以设定选区字母为小写。 + 键入 Alt-` 可以设定选区字母为大写。 + + 1. 移动光标到下面标记 ‘-->’ 的行。 + 2. 选择每个大写或小写错误的字母,键入 ~ 修改它。 + 3. 移动到第二个标记 ‘-->’ 的行。 + 4. 键入 x 选择行。 + 5. 键入 ` 将行变更为小写。 + 6. 移动到第三个标记 ‘-->’ 的行。 + 7. 键入 x 选择行。 + 5. 键入 Alt-` 将行文本变更为大写。 + + --> thIs sENtencE hAs MIS-cApitalIsed leTTerS. + --> this SENTENCE SHOULD all be in LOWERCASE. + --> THIS sentence should ALL BE IN uppercase! + + + +================================================================= += 10.4 分割选区 = +================================================================= + + 键入 S 可以使用正则分割选区内容。 + + 1. 移动光标到 --- 下面的行。 + 2. 键入 xx / 2x 选择两行。 + 3. 键入 S 然后输入 \. |! 然后回车(注意 . 和 ! 后都有空格)。 + 这样可以有效的将选区内容分割为每个句号和叹号对应的句子。 + 4. 键入 Alt-; 光标反转。 + 5. 键入 ; 撤销选择到单个字符,也就是每个句子的首字母。 + 6. 键入 Alt-` 将选择字母大写处理。 + +--- +these are sentences. some sentences don't start with uppercase +letters! that is not good grammar. you can fix this. + + + +================================================================= += 章节 10 概要 = +================================================================= + + * 键入 ) 和 ( 分别在多个选区中向前和向后循环主要选择。 + * 键入 Alt-, 来删除主选择。 + * 键入 Alt-) 和 Alt-( 可以循环选择的内容。 + + * 键入 ~ 可以切换选区字母的大小写。 + * 使用 ` 和 Alt-` 分别可以设定选区字母为小写和大写。 + + * 键入 S 可以使用正则分割选区内容。 + + + + + + + + + +================================================================= += = +================================================================= + + + + + + + + + + + + + + + +================================================================= + 该教程还在编著中。 + 更多的章节仍在计划中。