mirror of
https://gitlab.com/wsdjeg/vim-galore-zh_cn.git
synced 2025-01-19 03:19:27 +08:00
encode files in utf8 instead of gb2312
Files encoded by gb2312 will be garbled on *nix os.
This commit is contained in:
parent
f854f2c994
commit
543333af7e
@ -1,18 +1,18 @@
|
|||||||
## 粘贴归类 (要不为什么我总要设置‘粘贴’?)
|
## 粘贴归类 (要不为什么我总要设置‘粘贴’?)
|
||||||
|
|
||||||
粘贴归类模式使得终端虚拟器可以区分键入文本和粘贴文本。
|
粘贴归类模式使得终端虚拟器可以区分键入文本和粘贴文本。
|
||||||
|
|
||||||
你是否曾经尝试过向 Vim 粘贴过代码,结果弄得一团糟?
|
你是否曾经尝试过向 Vim 粘贴过代码,结果弄得一团糟?
|
||||||
|
|
||||||
这只会在你通过 `cmd+v`, `shift-insert`, `middle-click` 等等命令进行粘贴时发生。
|
这只会在你通过 `cmd+v`, `shift-insert`, `middle-click` 等等命令进行粘贴时发生。
|
||||||
因为那时你只是在向终端虚拟器里丢文本。Vim 并不知道你在粘贴文本,它天真地认为你是一个熟练的打字员。因此,它尝试排版,但是失败了。
|
因为那时你只是在向终端虚拟器里丢文本。Vim 并不知道你在粘贴文本,它天真地认为你是一个熟练的打字员。因此,它尝试排版,但是失败了。
|
||||||
|
|
||||||
如果你使用 Vim 命令集里的粘贴,比如 `"+p` ,那这就不会成为问题,因为 Vim 知道你做的是粘贴操作。
|
如果你使用 Vim 命令集里的粘贴,比如 `"+p` ,那这就不会成为问题,因为 Vim 知道你做的是粘贴操作。
|
||||||
|
|
||||||
为了解决这个,你需要设置粘贴 `:set paste` ,以便获取粘贴现状。 参考 `:h 'paste'` 和 `:h 'pastetoggle'`.
|
为了解决这个,你需要设置粘贴 `:set paste` ,以便获取粘贴现状。 参考 `:h 'paste'` 和 `:h 'pastetoggle'`.
|
||||||
|
|
||||||
如果你已经受够了不停地切换 `'paste'` ,看一看这个不错的插件能为你做什么:[粘贴归类](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 努力无缝地完成这些工作,并在终端虚拟器支持时自动设定粘贴归类模式。
|
||||||
|
@ -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/Escape_sequence) (或者叫 _控制序列_)来控制光标移动,更换文本颜色等等。
|
||||||
退出序列是一些以退出码(在 [插入符号](https://en.wikipedia.org/wiki/Caret_notation) 中展示为 `^[`)开头的 ASCII 码串。
|
退出序列是一些以退出码(在 [插入符号](https://en.wikipedia.org/wiki/Caret_notation) 中展示为 `^[`)开头的 ASCII 码串。
|
||||||
当接收到码串时,终端虚拟器会从 [terminfo](https://en.wikipedia.org/wiki/Terminfo) 数据库中寻找与之匹配的指令。
|
当接收到码串时,终端虚拟器会从 [terminfo](https://en.wikipedia.org/wiki/Terminfo) 数据库中寻找与之匹配的指令。
|
||||||
|
|
||||||
为了使问题更清晰,我想先解释一下映射超时。映射超时经常在模糊映射时发生:
|
为了使问题更清晰,我想先解释一下映射超时。映射超时经常在模糊映射时发生:
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
:nnoremap ,a :echo 'foo'<cr>
|
:nnoremap ,a :echo 'foo'<cr>
|
||||||
:nnoremap ,ab :echo 'bar'<cr>
|
:nnoremap ,ab :echo 'bar'<cr>
|
||||||
```
|
```
|
||||||
|
|
||||||
两个映射都有可能,键入 `,a` ,就会有一秒钟的延迟,因为 Vim 会等待用户会再键入 `b` 还是不会了。
|
两个映射都有可能,键入 `,a` ,就会有一秒钟的延迟,因为 Vim 会等待用户会再键入 `b` 还是不会了。
|
||||||
|
|
||||||
退出序列也会引起一样的问题:
|
退出序列也会引起一样的问题:
|
||||||
|
|
||||||
- `<esc>` 在返回正常模式或退出指令时被大量使用。
|
- `<esc>` 在返回正常模式或退出指令时被大量使用。
|
||||||
- 光标键使用了退出序列进行编码
|
- 光标键使用了退出序列进行编码
|
||||||
- Vim 运用 <kbd>Alt</kbd> (也被称为 _Meta key_)去发送固定的高位集编码的8位比特,但是很多终端虚拟器不支持(或者默认不启用),而用退出序列代替。
|
- Vim 运用 <kbd>Alt</kbd> (也被称为 _Meta key_)去发送固定的高位集编码的8位比特,但是很多终端虚拟器不支持(或者默认不启用),而用退出序列代替。
|
||||||
|
|
||||||
你可以用 `vim -u NONE -N` 试一试上面所说的,然后键入 `i<c-v><left>` ,你就会看见一串以 `^[`(表征退出码)开头的被输入序列。
|
你可以用 `vim -u NONE -N` 试一试上面所说的,然后键入 `i<c-v><left>` ,你就会看见一串以 `^[`(表征退出码)开头的被输入序列。
|
||||||
|
|
||||||
简而言之,区分键入的 `<esc>` 和一个严格意义上的退出序列对 Vim 来说是一个痛苦的过程。
|
简而言之,区分键入的 `<esc>` 和一个严格意义上的退出序列对 Vim 来说是一个痛苦的过程。
|
||||||
|
|
||||||
默认情况下 `:set timeout timeoutlen=1000` ,Vim 会有1秒的延迟在等 _还有吗_ 的模糊映射。
|
默认情况下 `:set timeout timeoutlen=1000` ,Vim 会有1秒的延迟在等 _还有吗_ 的模糊映射。
|
||||||
对于映射来说,这是一个稳健的值,但是通常为了解决整个问题,你可以自定义键入的超时阈值:
|
对于映射来说,这是一个稳健的值,但是通常为了解决整个问题,你可以自定义键入的超时阈值:
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
set timeout " 映射超时
|
set timeout " 映射超时
|
||||||
set timeoutlen=1000 " 默认值
|
set timeoutlen=1000 " 默认值
|
||||||
set ttimeout " 键入超时
|
set ttimeout " 键入超时
|
||||||
set ttimeoutlen=10 " 察觉不到的小值
|
set ttimeoutlen=10 " 察觉不到的小值
|
||||||
```
|
```
|
||||||
|
|
||||||
执行 `:h ttimeout` 你可以找到一个小表格展示这些选项的相互关系。
|
执行 `:h ttimeout` 你可以找到一个小表格展示这些选项的相互关系。
|
||||||
|
|
||||||
如果你在 Vim 和终端虚拟器之间使用的是 tmux ,请将以下一行放入 `~/.tmux.conf`:
|
如果你在 Vim 和终端虚拟器之间使用的是 tmux ,请将以下一行放入 `~/.tmux.conf`:
|
||||||
|
|
||||||
```tmux
|
```tmux
|
||||||
set -sg escape-time 0
|
set -sg escape-time 0
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
## 复活节彩蛋
|
## 复活节彩蛋
|
||||||
|
|
||||||
| 命令 | 消息 |
|
| 命令 | 消息 |
|
||||||
|-----------|---------|
|
|-----------|---------|
|
||||||
| `:Ni!` | `你需要灌木丛?` |
|
| `:Ni!` | `你需要灌木丛?` |
|
||||||
| `:h 'sm'` | `注意:这个缩写是限制级` |
|
| `:h 'sm'` | `注意:这个缩写是限制级` |
|
||||||
| `:h 42` | `生命,宇宙和一切的意义是什么?不幸的是, 道格拉斯·亚当斯(Douglas Adams),唯一知道这个问题的人现在已经死了。所以现在你可能会想知道死亡的意思是什么……` |
|
| `:h 42` | `生命,宇宙和一切的意义是什么?不幸的是, 道格拉斯・亚当斯(Douglas Adams),唯一知道这个问题的人现在已经死了。所以现在你可能会想知道死亡的意思是什么……` |
|
||||||
| `:h UserGettingBored` | `什么时候用户会按同一个键42次?好吧,我只是开个玩笑 :-)` |
|
| `:h UserGettingBored` | `什么时候用户会按同一个键42次?好吧,我只是开个玩笑 :-)` |
|
||||||
| `:h bar` | `这不是一个烟斗。` |
|
| `:h bar` | `这不是一个烟斗。` |
|
||||||
| `:h holy-grail` | `亚瑟,你终究找到了!` |
|
| `:h holy-grail` | `亚瑟,你终究找到了!` |
|
||||||
| `:h map-modes` | `:nunmap 命令在修道院外也能用.` |
|
| `:h map-modes` | `:nunmap 命令在修道院外也能用.` |
|
||||||
| `:help!` | `E478:别怕!` (故障? 在使用模块帮助时 (`模块类型=帮助`) 这和 `:h help.txt` 一个效果。) |
|
| `:help!` | `E478:别怕!` (故障? 在使用模块帮助时 (`模块类型=帮助`) 这和 `:h help.txt` 一个效果。) |
|
||||||
| `:smile` | `试一试这个表情 ;-) 添加于 7.4.1005.` |
|
| `:smile` | `试一试这个表情 ;-) 添加于 7.4.1005.` |
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
## 编辑大文件很慢
|
## 编辑大文件很慢
|
||||||
|
|
||||||
大文件最大的问题,就是 Vim 会一次性读取整个文件。这一过程的完成取决于内部如何提供缓存空间。
|
大文件最大的问题,就是 Vim 会一次性读取整个文件。这一过程的完成取决于内部如何提供缓存空间。
|
||||||
([Vim 开发的讨论](https://groups.google.com/forum/#!topic/vim_dev/oY3i8rqYGD4/discussion))
|
([Vim 开发的讨论](https://groups.google.com/forum/#!topic/vim_dev/oY3i8rqYGD4/discussion))
|
||||||
|
|
||||||
如果你只是想读取, `tail hugefile | vim -` 会是一个很好的解决方法.
|
如果你只是想读取, `tail hugefile | vim -` 会是一个很好的解决方法.
|
||||||
|
|
||||||
如果不用语法,设定和插件,你也能生活自理一段时间:
|
如果不用语法,设定和插件,你也能生活自理一段时间:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ vim -u NONE -N
|
$ vim -u NONE -N
|
||||||
```
|
```
|
||||||
|
|
||||||
这将使得导航明显提速,因为代价高昂的语法高亮正则表达式不再被使用。你也应该让 Vim 不要使用交换文件和 Vim 信息文件,以避免写入时的长延迟。
|
这将使得导航明显提速,因为代价高昂的语法高亮正则表达式不再被使用。你也应该让 Vim 不要使用交换文件和 Vim 信息文件,以避免写入时的长延迟。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ vim -n -u NONE -i NONE -N
|
$ vim -n -u NONE -i NONE -N
|
||||||
```
|
```
|
||||||
|
|
||||||
简而言之,真的写入超大文件的时候尽量别用 Vim。 :\
|
简而言之,真的写入超大文件的时候尽量别用 Vim。 :\
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
## 无法重复函数中执行的搜索
|
## 无法重复函数中执行的搜索
|
||||||
|
|
||||||
- 一个命令的搜索关键词(`/`, `:代替`, ...)改变了“上一次搜索所用的关键词”。(这个改变保存在 `/` 的注册表里;使用 `:echo @/` 可以打印出来)
|
- 一个命令的搜索关键词(`/`, `:代替`, ...)改变了“上一次搜索所用的关键词”。(这个改变保存在 `/` 的注册表里;使用 `:echo @/` 可以打印出来)
|
||||||
- 一个简单的文本修改可以用 `.` 再次执行。(这个执行保存在 `.` 的注册表里;使用 `:echo @.` 可以打印出来)
|
- 一个简单的文本修改可以用 `.` 再次执行。(这个执行保存在 `.` 的注册表里;使用 `:echo @.` 可以打印出来)
|
||||||
|
|
||||||
如果你在一个函数里做以上操作,两件都_not_会是那么回事儿。所以你不能简单地在一个函数里高亮词汇同时再用这个函数做文本修改。
|
如果你在一个函数里做以上操作,两件都_not_会是那么回事儿。所以你不能简单地在一个函数里高亮词汇同时再用这个函数做文本修改。
|
||||||
|
|
||||||
帮助: `:h function-search-undo`
|
帮助: `:h function-search-undo`
|
@ -1,30 +1,30 @@
|
|||||||
## 映射大写锁定键(CapsLock)到控制键(Ctrl)
|
## 映射大写锁定键(CapsLock)到控制键(Ctrl)
|
||||||
|
|
||||||
大写锁定键属于键盘上最少用到的按键,但是它要比控制键更加容易按到,
|
大写锁定键属于键盘上最少用到的按键,但是它要比控制键更加容易按到,
|
||||||
因为它位于你手放在键盘时的[起始行](https://raw.githubusercontent.com/mhinz/vim-galore/master/contents/images/content-homerow.png)。
|
因为它位于你手放在键盘时的[起始行](https://raw.githubusercontent.com/mhinz/vim-galore/master/contents/images/content-homerow.png)。
|
||||||
如果你敲很多代码的话,映射大写锁定键(CapsLock)到控制键(Ctrl)可以有效降低
|
如果你敲很多代码的话,映射大写锁定键(CapsLock)到控制键(Ctrl)可以有效降低
|
||||||
[重复使力伤害](https://de.wikipedia.org/wiki/Repetitive-Strain-Injury-Syndrom) (ps:为什么将 jk 映射为 esc,而不是 jj,重复点击同一个按键对手指伤害很大)。
|
[重复使力伤害](https://de.wikipedia.org/wiki/Repetitive-Strain-Injury-Syndrom) (ps:为什么将 jk 映射为 esc,而不是 jj,重复点击同一个按键对手指伤害很大)。
|
||||||
|
|
||||||
友情提示:当你习惯这个设定后,你就离不开它了。
|
友情提示:当你习惯这个设定后,你就离不开它了。
|
||||||
|
|
||||||
**OSX**:
|
**OSX**:
|
||||||
|
|
||||||
`System Preferences -> Keyboard -> Keyboard Tab -> Modifier Keys`. 变更
|
`System Preferences -> Keyboard -> Keyboard Tab -> Modifier Keys`. 变更
|
||||||
"CapsLock" 为 "Control"。
|
"CapsLock" 为 "Control"。
|
||||||
|
|
||||||
**Linux**:
|
**Linux**:
|
||||||
|
|
||||||
为了使按键生效,请把以下几行放入 `~/.xmodmap` 文件:
|
为了使按键生效,请把以下几行放入 `~/.xmodmap` 文件:
|
||||||
|
|
||||||
remove Lock = Caps_Lock
|
remove Lock = Caps_Lock
|
||||||
keysym Caps_Lock = Control_L
|
keysym Caps_Lock = Control_L
|
||||||
add Control = Control_L
|
add Control = Control_L
|
||||||
|
|
||||||
用以下命令使之生效<br> `$ xmodmap ~/.xmodmap`。
|
用以下命令使之生效<br> `$ xmodmap ~/.xmodmap`。
|
||||||
|
|
||||||
替代方法有[caps2esc](https://github.com/oblitum/caps2esc) 或者
|
替代方法有[caps2esc](https://github.com/oblitum/caps2esc) 或者
|
||||||
[xcape](https://github.com/alols/xcape)。
|
[xcape](https://github.com/alols/xcape)。
|
||||||
|
|
||||||
**Windows**:
|
**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)。
|
||||||
|
6
chapter/newline-used-for-nul.md
Executable file → Normal file
6
chapter/newline-used-for-nul.md
Executable file → Normal file
@ -1,5 +1,5 @@
|
|||||||
## NUL 符用新行表示
|
## NUL 符用新行表示
|
||||||
|
|
||||||
文件中的 NUL 符 (`\0`),在内存中被以新行(`\n`)保存,在缓存空间中显示为 `^@`。
|
文件中的 NUL 符 (`\0`),在内存中被以新行(`\n`)保存,在缓存空间中显示为 `^@`。
|
||||||
|
|
||||||
更多信息请参看 `man 7 ascii` 和 `:h NL-used-for-Nul` 。
|
更多信息请参看 `man 7 ascii` 和 `:h NL-used-for-Nul` 。
|
@ -1,11 +1,11 @@
|
|||||||
## 内置插件
|
## 内置插件
|
||||||
|
|
||||||
出乎很多人的意料,Vim自己默认加载了大把大把的插件。启动 Vim 后,用`:scriptnames`查看所有加载的源文件
|
出乎很多人的意料,Vim自己默认加载了大把大把的插件。启动 Vim 后,用`:scriptnames`查看所有加载的源文件
|
||||||
|
|
||||||
这些文件多数永远不会被用到,所以请禁止如你所见的以下插件。
|
这些文件多数永远不会被用到,所以请禁止如你所见的以下插件。
|
||||||
这些插件仍旧会在源文件列出,但是当Vim启动时,只有第一行会被读取,而之后的配置,命令和日志都不会执行。
|
这些插件仍旧会在源文件列出,但是当Vim启动时,只有第一行会被读取,而之后的配置,命令和日志都不会执行。
|
||||||
|
|
||||||
| 插件 | 禁用 | 帮助 |
|
| 插件 | 禁用 | 帮助 |
|
||||||
|------------|-------------------------------------|------|
|
|------------|-------------------------------------|------|
|
||||||
| 2html | `let g:loaded_2html_plugin = 1` | `:h 2html` |
|
| 2html | `let g:loaded_2html_plugin = 1` | `:h 2html` |
|
||||||
| getscript | `let g:loaded_getscriptPlugin = 1` | `:h pi_getscript` |
|
| getscript | `let g:loaded_getscriptPlugin = 1` | `:h pi_getscript` |
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
## Vim 配置集合
|
## Vim 配置集合
|
||||||
|
|
||||||
Vim 配置集合是集成多多种插件以及相关配置的组合。
|
Vim 配置集合是集成多多种插件以及相关配置的组合。
|
||||||
|
|
||||||
高阶用户总是知道如何构建自己的编辑器,所以配置集合一般是针对初学者。
|
高阶用户总是知道如何构建自己的编辑器,所以配置集合一般是针对初学者。
|
||||||
如果你想要尝试,那么将面临一个辩证的想法:加入很多额外的东西来学习 Vim 是否会让这变得更加简单。
|
如果你想要尝试,那么将面临一个辩证的想法:加入很多额外的东西来学习 Vim 是否会让这变得更加简单。
|
||||||
|
|
||||||
我知道很多人不想在配置编辑器上花过多时间(但实际上,当你卡住时,你就会不停地花时间定制自己的 vimrc)
|
我知道很多人不想在配置编辑器上花过多时间(但实际上,当你卡住时,你就会不停地花时间定制自己的 vimrc)
|
||||||
因此,想要节约时间,那么就因该真正的去了解和学习 Vim 原生功能,只有这样你才能中获益。
|
因此,想要节约时间,那么就因该真正的去了解和学习 Vim 原生功能,只有这样你才能中获益。
|
||||||
|
|
||||||
再次强调一下:“一个程序员应当懂得他的工具”。
|
再次强调一下:“一个程序员应当懂得他的工具”。
|
||||||
|
|
||||||
总之,如果你知道自己在做什么,你也许能从以下几个 Vim 配置集合中获得一些灵感。
|
总之,如果你知道自己在做什么,你也许能从以下几个 Vim 配置集合中获得一些灵感。
|
||||||
|
|
||||||
- [cream](http://cream.sourceforge.net)
|
- [cream](http://cream.sourceforge.net)
|
||||||
- [janus](https://github.com/carlhuda/janus.git)
|
- [janus](https://github.com/carlhuda/janus.git)
|
||||||
|
@ -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 系统会以`~`代表主目录。
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user