diff --git a/README.md b/README.md index e79a1a4..9b574fd 100644 --- a/README.md +++ b/README.md @@ -488,9 +488,9 @@ Vim 为我们提供了如下的寄存器: 如果想跳转到指定的标注,你可以先按下 `'` / `g'` 或者 `` ` `` / `` g` `` 然后按下标注名。 -如果你想定义当前文件中的标注,可以先按下 `m` 再按下标注名。比如,按下 `mm` 就可以把当前位置标注为 `m`。在这之后,如果你的光标切换到了文件的其他位置,只需要通过 `'m` 或者 `\`m`即可回到刚才标注的行。区别在于,`'m`会跳转回被标记行的第一个非空字符,而`\`m`会跳转回被标记行的被标记列。根据 viminfo 的设置,你可以在退出 Vim 的时候保留小写字符标注。请参阅`:h viminfo-'\` 来获取更多帮助。 +如果你想定义当前文件中的标注,可以先按下 `m` 再按下标注名。比如,按下 `mm` 就可以把当前位置标注为 `m`。在这之后,如果你的光标切换到了文件的其他位置,只需要通过 `'m` 或者 `` `m ``即可回到刚才标注的行。区别在于,`'m`会跳转回被标记行的第一个非空字符,而`` `m ``会跳转回被标记行的被标记列。根据 viminfo 的设置,你可以在退出 Vim 的时候保留小写字符标注。请参阅`:h viminfo-'` 来获取更多帮助。 -如果你想定义全局的标注,可以先按下 `m` 再按下大写英文字符。比如,按下 `mM` 就可以把当前文件的当前位置标注为 `M`。在这之后,就算你切换到其他的缓冲区,依然可以通过 `'M` 或 `\`M\` 跳转回来。 +如果你想定义全局的标注,可以先按下 `m` 再按下大写英文字符。比如,按下 `mM` 就可以把当前文件的当前位置标注为 `M`。在这之后,就算你切换到其他的缓冲区,依然可以通过 `'M` 或 `` `M `` 跳转回来。 关于跳转,还有以下的方式: @@ -560,7 +560,7 @@ Vim 在插入模式中为我们提供了多种补全方案。如果有多个补 以下会列出一些常用的动作。你也可以通过 `:h navigation` 来获取更多的帮助。 -**操作符**是对某个区域文本执行的操作。比如,`d`、`~`、`gU` 和 `>` 都是操作符。这些操作符既可以在普通模式下使用,也可以在可视模式下使用。在普通模式中,顺序是先按操作符,再按动作指令,比如 `>j`。在可是模式中,选中区域后直接按操作符就可以,比如 `Vjd`。 +**操作符**是对某个区域文本执行的操作。比如,`d`、`~`、`gU` 和 `>` 都是操作符。这些操作符既可以在普通模式下使用,也可以在可视模式下使用。在普通模式中,顺序是先按操作符,再按动作指令,比如 `>j`。在可视模式中,选中区域后直接按操作符就可以,比如 `Vjd`。 与动作一样,操作符也可以搭配数字使用,比如 `2gUw` 可以将当前单词以及下一个单词转成大写。由于动作和操作符都可以搭配数字使用,因此 `2gU2w` 与执行两次 `gU2w` 效果是相同的。 diff --git a/chapter/bracketed-paste.md b/chapter/bracketed-paste.md index f7356d4..7a56d81 100644 --- a/chapter/bracketed-paste.md +++ b/chapter/bracketed-paste.md @@ -1,18 +1,18 @@ -## ճ (ҪΪʲôҪáճ) +## 粘贴归类 (要不为什么我总要设置‘粘贴’?) -ճģʽʹնּıճı +粘贴归类模式使得终端虚拟器可以区分键入文本和粘贴文本。 -ǷԹ Vim ճ룬Ūһ㣿 +你是否曾经尝试过向 Vim 粘贴过代码,结果弄得一团糟? -ֻͨ `cmd+v` `shift-insert` `middle-click` ȵճʱ -ΪʱֻնﶪıVim ֪ճıΪһĴԱˣŰ棬ʧˡ +这只会在你通过 `cmd+v`, `shift-insert`, `middle-click` 等等命令进行粘贴时发生。 +因为那时你只是在向终端虚拟器里丢文本。Vim 并不知道你在粘贴文本,它天真地认为你是一个熟练的打字员。因此,它尝试排版,但是失败了。 -ʹ Vim ճ `"+p` ͲΪ⣬Ϊ Vim ֪ճ +如果你使用 Vim 命令集里的粘贴,比如 `"+p` ,那这就不会成为问题,因为 Vim 知道你做的是粘贴操作。 -Ϊ˽Ҫճ `:set paste` Աȡճ״ ο `:h 'paste'` `:h 'pastetoggle'`. +为了解决这个,你需要设置粘贴 `:set paste` ,以便获取粘贴现状。 参考 `:h 'paste'` 和 `:h 'pastetoggle'`. -Ѿܹ˲ͣл `'paste'` һIJΪʲô[ճ](https://github.com/ConradIrwin/vim-bracketed-paste) +如果你已经受够了不停地切换 `'paste'` ,看一看这个不错的插件能为你做什么:[粘贴归类](https://github.com/ConradIrwin/vim-bracketed-paste)。 -ߵչĶ[ӭ](http://cirw.in/blog/bracketed-paste). +插件作者的拓展阅读:[欢迎点击](http://cirw.in/blog/bracketed-paste). -**Neovim**: Neovim Ŭ޷Щն֧ʱԶ趨ճģʽ +**Neovim**: Neovim 努力无缝地完成这些工作,并在终端虚拟器支持时自动设定粘贴归类模式。 diff --git a/chapter/delays-when-using-escape-key-in-terminal.md b/chapter/delays-when-using-escape-key-in-terminal.md index d364eff..f91e327 100644 --- a/chapter/delays-when-using-escape-key-in-terminal.md +++ b/chapter/delays-when-using-escape-key-in-terminal.md @@ -1,43 +1,43 @@ -## ʹն Esc ʱӳ +## 使用终端中 Esc 键时的延迟 -ʹ xterm gnome-terminal iTerm2 ȵν _ն_[ն](https://en.wikipedia.org/wiki/Computer_terminal) +如果你生活在命令行里,你可能使用 xterm, gnome-terminal, iTerm2 等等所谓的 _终端虚拟器_。(区别于真正的[终端](https://en.wikipedia.org/wiki/Computer_terminal)) -նһնʹ [˳](https://en.wikipedia.org/wiki/Escape_sequence) ߽ __ƹƶıɫȵȡ -˳һЩ˳루 [](https://en.wikipedia.org/wiki/Caret_notation) չʾΪ `^[`ͷ ASCII 봮 -յ봮ʱն [terminfo](https://en.wikipedia.org/wiki/Terminfo) ݿѰ֮ƥָ +和宿主终端一样,终端虚拟器使用 [退出序列](https://en.wikipedia.org/wiki/Escape_sequence) (或者叫 _控制序列_)来控制光标移动,更换文本颜色等等。 +退出序列是一些以退出码(在 [插入符号](https://en.wikipedia.org/wiki/Caret_notation) 中展示为 `^[`)开头的 ASCII 码串。 +当接收到码串时,终端虚拟器会从 [terminfo](https://en.wikipedia.org/wiki/Terminfo) 数据库中寻找与之匹配的指令。 -ΪʹȽһӳ䳬ʱӳ䳬ʱģӳʱ +为了使问题更清晰,我想先解释一下映射超时。映射超时经常在模糊映射时发生: ```vim :nnoremap ,a :echo 'foo' :nnoremap ,ab :echo 'bar' ``` -ӳ䶼пܣ `,a` ͻһӵӳ٣Ϊ Vim ȴûټ `b` Dzˡ +两个映射都有可能,键入 `,a` ,就会有一秒钟的延迟,因为 Vim 会等待用户会再键入 `b` 还是不会了。 -˳Ҳһ⣺ +退出序列也会引起一样的问题: -- `` ڷģʽ˳ָʱʹá -- ʹ˳нб -- Vim Alt ҲΪ _Meta key_ȥ͹̶ĸλ8λأǺܶն֧֣Ĭϲã˳д档 +- `` 在返回正常模式或退出指令时被大量使用。 +- 光标键使用了退出序列进行编码 +- Vim 运用 Alt (也被称为 _Meta key_)去发送固定的高位集编码的8位比特,但是很多终端虚拟器不支持(或者默认不启用),而用退出序列代替。 - `vim -u NONE -N` һ˵ģȻ `i` ͻῴһ `^[`˳룩ͷıС +你可以用 `vim -u NONE -N` 试一试上面所说的,然后键入 `i` ,你就会看见一串以 `^[`(表征退出码)开头的被输入序列。 -ּ֮ `` һϸϵ˳ж Vim ˵һʹĹ̡ +简而言之,区分键入的 `` 和一个严格意义上的退出序列对 Vim 来说是一个痛苦的过程。 -Ĭ `:set timeout timeoutlen=1000` Vim 1ӳڵ __ ģӳ䡣 -ӳ˵һȽֵͨΪ˽⣬Զijʱֵ +默认情况下 `:set timeout timeoutlen=1000` ,Vim 会有1秒的延迟在等 _还有吗_ 的模糊映射。 +对于映射来说,这是一个稳健的值,但是通常为了解决整个问题,你可以自定义键入的超时阈值: ```vim -set timeout " ӳ䳬ʱ -set timeoutlen=1000 " Ĭֵ -set ttimeout " 볬ʱ -set ttimeoutlen=10 " Сֵ +set timeout " 映射超时 +set timeoutlen=1000 " 默认值 +set ttimeout " 键入超时 +set ttimeoutlen=10 " 察觉不到的小值 ``` -ִ `:h ttimeout` ҵһСչʾЩѡ໥ϵ +执行 `:h ttimeout` 你可以找到一个小表格展示这些选项的相互关系。 - Vim ն֮ʹõ tmux 뽫һз `~/.tmux.conf` +如果你在 Vim 和终端虚拟器之间使用的是 tmux ,请将以下一行放入 `~/.tmux.conf`: ```tmux set -sg escape-time 0 diff --git a/chapter/easter-eggs.md b/chapter/easter-eggs.md index bb66cbc..7c187fb 100644 --- a/chapter/easter-eggs.md +++ b/chapter/easter-eggs.md @@ -1,13 +1,13 @@ -## ڲʵ +## 复活节彩蛋 -| | Ϣ | +| 命令 | 消息 | |-----------|---------| -| `:Ni!` | `Ҫľԣ` | -| `:h 'sm'` | `ע⣺дƼ` | -| `:h 42` | `һеʲôҵǣ ˹ǵ˹Douglas AdamsΨһ֪Ѿˡܻ֪˼ʲô` | -| `:h UserGettingBored` | `ʲôʱûᰴͬһ42ΣðɣֻǿЦ :-)` | -| `:h bar` | `ⲻһ̶` | -| `:h holy-grail` | `ɪվҵˣ` | -| `:h map-modes` | `:nunmap ޵ԺҲ.` | -| `:help!` | `E478£` (? ʹģʱ (`ģ=`) `:h help.txt` һЧ) | -| `:smile` | `һ ;-) 7.4.1005.` | +| `:Ni!` | `你需要灌木丛?` | +| `:h 'sm'` | `注意:这个缩写是限制级` | +| `:h 42` | `生命,宇宙和一切的意义是什么?不幸的是, 道格拉斯・亚当斯(Douglas Adams),唯一知道这个问题的人现在已经死了。所以现在你可能会想知道死亡的意思是什么……` | +| `:h UserGettingBored` | `什么时候用户会按同一个键42次?好吧,我只是开个玩笑 :-)` | +| `:h bar` | `这不是一个烟斗。` | +| `:h holy-grail` | `亚瑟,你终究找到了!` | +| `:h map-modes` | `:nunmap 命令在修道院外也能用.` | +| `:help!` | `E478:别怕!` (故障? 在使用模块帮助时 (`模块类型=帮助`) 这和 `:h help.txt` 一个效果。) | +| `:smile` | `试一试这个表情 ;-) 添加于 7.4.1005.` | diff --git a/chapter/editing-huge-files-is-slow.md b/chapter/editing-huge-files-is-slow.md index e3c0cae..daf9d33 100644 --- a/chapter/editing-huge-files-is-slow.md +++ b/chapter/editing-huge-files-is-slow.md @@ -1,20 +1,20 @@ -## ༭ļ +## 编辑大文件很慢 -ļ⣬ Vim һԶȡļһ̵ȡڲṩռ䡣 -([Vim ](https://groups.google.com/forum/#!topic/vim_dev/oY3i8rqYGD4/discussion)) +大文件最大的问题,就是 Vim 会一次性读取整个文件。这一过程的完成取决于内部如何提供缓存空间。 +([Vim 开发的讨论](https://groups.google.com/forum/#!topic/vim_dev/oY3i8rqYGD4/discussion)) -ֻȡ `tail hugefile | vim -` һܺõĽ. +如果你只是想读取, `tail hugefile | vim -` 会是一个很好的解决方法. -﷨趨ͲҲһʱ: +如果不用语法,设定和插件,你也能生活自理一段时间: ``` $ vim -u NONE -N ``` -⽫ʹõ٣Ϊ۸߰﷨ʽٱʹáҲӦ Vim Ҫʹýļ Vim ϢļԱдʱijӳ١ +这将使得导航明显提速,因为代价高昂的语法高亮正则表达式不再被使用。你也应该让 Vim 不要使用交换文件和 Vim 信息文件,以避免写入时的长延迟。 ``` $ vim -n -u NONE -i NONE -N ``` -֮д볬ļʱ Vim :\ +简而言之,真的写入超大文件的时候尽量别用 Vim。 :\ diff --git a/chapter/function-search-undo.md b/chapter/function-search-undo.md index 7db6925..d5c6b31 100644 --- a/chapter/function-search-undo.md +++ b/chapter/function-search-undo.md @@ -1,8 +1,8 @@ -## ޷ظִе +## 无法重复函数中执行的搜索 -- һؼʣ`/`, `:`, ...ıˡһõĹؼʡı䱣 `/` עʹ `:echo @/` Դӡ -- һ򵥵ı޸Ŀ `.` ٴִСִб `.` עʹ `:echo @.` Դӡ +- 一个命令的搜索关键词(`/`, `:代替`, ...)改变了“上一次搜索所用的关键词”。(这个改变保存在 `/` 的注册表里;使用 `:echo @/` 可以打印出来) +- 一个简单的文本修改可以用 `.` 再次执行。(这个执行保存在 `.` 的注册表里;使用 `:echo @.` 可以打印出来) -һϲ_not_ô¶㲻ܼ򵥵һʻͬʱı޸ġ +如果你在一个函数里做以上操作,两件都_not_会是那么回事儿。所以你不能简单地在一个函数里高亮词汇同时再用这个函数做文本修改。 - `:h function-search-undo` \ No newline at end of file +帮助: `:h function-search-undo` \ No newline at end of file diff --git a/chapter/map-capslock-to-control.md b/chapter/map-capslock-to-control.md index a5bf1bb..a4bb390 100644 --- a/chapter/map-capslock-to-control.md +++ b/chapter/map-capslock-to-control.md @@ -1,30 +1,30 @@ -## ӳдCapsLockƼCtrl +## 映射大写锁定键(CapsLock)到控制键(Ctrl) -дڼõİҪȿƼװ -Ϊλַڼʱ[ʼ](https://raw.githubusercontent.com/mhinz/vim-galore/master/contents/images/content-homerow.png) -úܶĻӳдCapsLockƼCtrlЧ -[ظʹ˺](https://de.wikipedia.org/wiki/Repetitive-Strain-Injury-Syndrom) (ps:Ϊʲô jk ӳΪ esc jjظͬһָ˺ܴ) +大写锁定键属于键盘上最少用到的按键,但是它要比控制键更加容易按到, +因为它位于你手放在键盘时的[起始行](https://raw.githubusercontent.com/mhinz/vim-galore/master/contents/images/content-homerow.png)。 +如果你敲很多代码的话,映射大写锁定键(CapsLock)到控制键(Ctrl)可以有效降低 +[重复使力伤害](https://de.wikipedia.org/wiki/Repetitive-Strain-Injury-Syndrom) (ps:为什么将 jk 映射为 esc,而不是 jj,重复点击同一个按键对手指伤害很大)。 -ʾϰ趨벻ˡ +友情提示:当你习惯这个设定后,你就离不开它了。 **OSX**: -`System Preferences -> Keyboard -> Keyboard Tab -> Modifier Keys`. -"CapsLock" Ϊ "Control" +`System Preferences -> Keyboard -> Keyboard Tab -> Modifier Keys`. 变更 +"CapsLock" 为 "Control"。 **Linux**: -ΪʹЧ¼з `~/.xmodmap` ļ: +为了使按键生效,请把以下几行放入 `~/.xmodmap` 文件: remove Lock = Caps_Lock keysym Caps_Lock = Control_L add Control = Control_L -ʹ֮Ч
`$ xmodmap ~/.xmodmap` +用以下命令使之生效
`$ xmodmap ~/.xmodmap`。 -[caps2esc](https://github.com/oblitum/caps2esc) -[xcape](https://github.com/alols/xcape) +替代方法有[caps2esc](https://github.com/oblitum/caps2esc) 或者 +[xcape](https://github.com/alols/xcape)。 **Windows**: -ο [superuser.com: Windows8.1ӳдƼ](http://superuser.com/questions/764782/map-caps-lock-to-control-in-windows-8-1) +请参看 [superuser.com: 在Windows8.1映射大写锁定键到控制键](http://superuser.com/questions/764782/map-caps-lock-to-control-in-windows-8-1)。 diff --git a/chapter/newline-used-for-nul.md b/chapter/newline-used-for-nul.md new file mode 100755 index 0000000..4690d59 --- /dev/null +++ b/chapter/newline-used-for-nul.md @@ -0,0 +1,5 @@ +## NUL 符用新行表示 + +文件中的 NUL 符 (`\0`),在内存中被以新行(`\n`)保存,在缓存空间中显示为 `^@`。 + +更多信息请参看 `man 7 ascii` 和 `:h NL-used-for-Nul` 。 \ No newline at end of file diff --git a/chapter/standard-plugins.md b/chapter/standard-plugins.md index fc5073c..82d718c 100644 --- a/chapter/standard-plugins.md +++ b/chapter/standard-plugins.md @@ -1,11 +1,11 @@ -## ò +## 内置插件 -ܶ˵ϣVimԼĬϼ˴ѴѵIJ Vim `:scriptnames`鿴мصԴļ +出乎很多人的意料,Vim自己默认加载了大把大把的插件。启动 Vim 后,用`:scriptnames`查看所有加载的源文件 -ЩļԶᱻõֹ² -ЩԾɻԴļгǵVimʱֻеһлᱻȡ֮ã־ִС +这些文件多数永远不会被用到,所以请禁止如你所见的以下插件。 +这些插件仍旧会在源文件列出,但是当Vim启动时,只有第一行会被读取,而之后的配置,命令和日志都不会执行。 -| | | | +| 插件 | 禁用 | 帮助 | |------------|-------------------------------------|------| | 2html | `let g:loaded_2html_plugin = 1` | `:h 2html` | | getscript | `let g:loaded_getscriptPlugin = 1` | `:h pi_getscript` | diff --git a/chapter/vim-distributions.md b/chapter/vim-distributions.md index 8561d01..1bbe5bf 100644 --- a/chapter/vim-distributions.md +++ b/chapter/vim-distributions.md @@ -1,16 +1,16 @@ -## Vim ü +## Vim 配置集合 -Vim üǼɶֲԼõϡ +Vim 配置集合是集成多多种插件以及相关配置的组合。 -߽û֪ιԼı༭üһԳѧߡ -Ҫԣôһ֤뷨ܶĶѧϰ Vim ǷøӼ򵥡 +高阶用户总是知道如何构建自己的编辑器,所以配置集合一般是针对初学者。 +如果你想要尝试,那么将面临一个辩证的想法:加入很多额外的东西来学习 Vim 是否会让这变得更加简单。 -֪ܶ˲ñ༭ϻʱ䣨ʵϣ㿨סʱͻ᲻ͣػʱ䶨Լ vimrc -ˣҪԼʱ䣬ôȥ˽ѧϰ Vim ԭܣֻл档 +我知道很多人不想在配置编辑器上花过多时间(但实际上,当你卡住时,你就会不停地花时间定制自己的 vimrc) +因此,想要节约时间,那么就因该真正的去了解和学习 Vim 原生功能,只有这样你才能中获益。 -ٴǿһ£һԱӦĹߡ +再次强调一下:“一个程序员应当懂得他的工具”。 -֪֮ԼʲôҲܴ¼ Vim üлһЩС +总之,如果你知道自己在做什么,你也许能从以下几个 Vim 配置集合中获得一些灵感。 - [cream](http://cream.sourceforge.net) - [janus](https://github.com/carlhuda/janus.git) diff --git a/chapter/why-hjkl-for-navigation.md b/chapter/why-hjkl-for-navigation.md index 28b5288..8e0e2be 100644 --- a/chapter/why-hjkl-for-navigation.md +++ b/chapter/why-hjkl-for-navigation.md @@ -1,8 +1,8 @@ -## Ϊʲôhjklƶꣿ +## 为什么用hjkl移动光标? - [Bill Joy](https://en.wikipedia.org/wiki/Bill_Joy) [vi](https://en.wikipedia.org/wiki/Vi)Vim ǰʱ, Ĺһ̨[ADM-3A](https://en.wikipedia.org/wiki/ADM-3A)ɵģûñļƹ꣬µ hjkl ΪƼ +当 [Bill Joy](https://en.wikipedia.org/wiki/Bill_Joy) 创建[vi](https://en.wikipedia.org/wiki/Vi),Vim 的前身时, 他的工作是在一台[ADM-3A](https://en.wikipedia.org/wiki/ADM-3A)完成的,而这个机器没有用别的键控制光标,而正是如你猜到的 hjkl 作为光标控制键。 -̲: [](https://raw.githubusercontent.com/mhinz/vim-galore/master/contents/images/content-adm-3a-layout.jpg) +键盘布局: [请点击](https://raw.githubusercontent.com/mhinz/vim-galore/master/contents/images/content-adm-3a-layout.jpg) -ҲΪʲô Unix ϵͳ`~`Ŀ¼ +这也告诉了我们为什么 Unix 系统会以`~`代表主目录。