Skip to content

Commit 3db660f

Browse files
committed
add en folder
1 parent c6c8b37 commit 3db660f

19 files changed

+1166
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.DS_Store

en/README.md

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# Vim 实操教程(Learning Vim)
2+
3+
以我个人学习 Vim 的经验来看,通过看文档或看其他人操作其实是很难真正学会 Vim 的,你必须在实际
4+
应用中,进入真实场景才能逐渐熟悉并掌握相关命令。
5+
6+
因此,为了同时满足学习和操作的需求,项目中的文件都采用了 Markdown 格式,既可以当作说明文档来
7+
阅读,也可以用 Vim 打开文件进行实际操作(建议采用后者)。
8+
9+
## 如何使用
10+
11+
1. 进入控制台
12+
2. clone 项目到本地
13+
```
14+
git clone https://github.com/dofy/learn-vim.git
15+
```
16+
3. 进入项目文件夹
17+
```
18+
cd learn-vim
19+
```
20+
4. 用 Vim 打开文件 `file-one.md`
21+
```
22+
vim file-one.md
23+
```
24+
25+
## 排版规范
26+
27+
```Markdown
28+
## 大标题表示一大类
29+
30+
### 小标题表示该大类下的小分类
31+
32+
没有任何格式的文本为正常描述,只有阅读功能。
33+
34+
> 嵌入到引用块中的文本为操作指示,你可以按照里面提到的内容进行操作
35+
>
36+
> 同时操作符或命令会包含在类似 `:w` 的符号中
37+
38+
命令中形如 f<X> 中的 < 和 > 不需要打出来,<X> 代表一个变量,即你可以打 fa 或 fb 亦或 fC
39+
40+
_注意:命令区分大小写(需要注意的事项会出现在当前行这样的符号中)_
41+
```
42+
43+
## 导航
44+
45+
### 基础操作
46+
47+
1. [光标的移动](file-one.md)
48+
1. [打开文件、查找内容](file-two.md)
49+
1. [文档的修改与保存](file-three.md)
50+
1. [一些小技巧](file-four.md)
51+
1. [分屏与标签页](file-five.md)
52+
1. [块操作](file-six.md)
53+
1. [Vim 中的宏](file-seven.md)
54+
55+
### 附加内容
56+
57+
1. [Vim 插件](plugin.md)
58+
1. [插件推荐](plugins/index.md)
59+
1. [NERDTree](plugins/nerdtree.md)
60+
1. [EasyAlign](plugins/easyalign.md)
61+
1. [Airline & Themes](plugins/airline.md)
62+
1. [surround.vim](plugins/surround.md)
63+
64+
## Tips
65+
66+
- 教程中会有下一章或相关章节的导航,定位到文件名执行 `gf`(goto file)就可以打开相关文件
67+
- 你可以随时打开相关章节查看,然后用 `:bp` 回到之前的文件(该命令会在[第二章](file-two.md)中讲到)
68+
- 当你用 `:q``:qa` 退出教程时可能会收到文件未保存的错误提醒,试试在命令后面加上 `!`
69+
70+
## TODO
71+
72+
- [ ] vimdiff
73+
- [ ] more settings
74+
- [ ] other mode
75+
- [ ] text object
76+
- [x] [plugins](plugin.md)
77+
78+
## 推荐几个 Vim 配置方案
79+
80+
- [dofy / **7th-vim**][7th-vim]
81+
- [kepbod / **ivim**][kepbod]
82+
- [chxuan / **vimplus**][chxuan]
83+
- [SpaceVim / **SpaceVim**][spacevim]
84+
85+
## 推荐另外几个出色的 Vim 教程
86+
87+
- 控制台运行 `vimtutor` 这是 Vim 官方实操教程
88+
- [简明 Vim 练级攻略][coolshell] 很不错的入门教程
89+
- [Vim Galore][vimgalore] 更新频繁,Vim 进阶必读
90+
- [每日一Vim][liuzhijun] 共 30 篇,内容比较全
91+
- [Vim 教程网][vimjc] 一个女生维护的 Vim 中文教程网站,持续更新中
92+
- [A book for learning the Vim editor][learnvim] 另一个 Learn Vim (英语)
93+
- [Open Vim][openvim] 交互式 Vim 教程
94+
- [QuickRef.ME/vim][quickref] Vim cheatsheet
95+
96+
## Cheatsheets
97+
98+
> [Vim Cheat Sheet][cheatsheets1]
99+
100+
> [A Great Vim Cheat Sheet][cheatsheets2]
101+
102+
> [![003][cheatsheets3]][cheatsheets3]
103+
104+
> [![004][cheatsheets4]][cheatsheets4]
105+
106+
> [![005][cheatsheets5]][cheatsheets5]
107+
108+
**再次感谢您的关注!如果爱,请分享。爱生活,爱 VIM!**
109+
110+
[7th-vim]: https://github.com/dofy/7th-vim
111+
[kepbod]: https://github.com/kepbod/ivim
112+
[chxuan]: https://github.com/chxuan/vimplus
113+
[spacevim]: https://github.com/SpaceVim/SpaceVim
114+
[coolshell]: http://coolshell.cn/articles/5426.html
115+
[vimgalore]: https://github.com/mhinz/vim-galore
116+
[liuzhijun]: http://liuzhijun.iteye.com/category/270228
117+
[vimjc]: https://vimjc.com
118+
[learnvim]: https://github.com/iggredible/Learn-Vim
119+
[openvim]: https://openvim.com/
120+
[quickref]: https://quickref.me/vim
121+
[cheatsheets1]: https://vim.rtorr.com/lang/zh_tw
122+
[cheatsheets2]: https://vimsheet.com/
123+
[cheatsheets3]: http://people.csail.mit.edu/vgod/vim/vim-cheat-sheet-en.png
124+
[cheatsheets4]: https://cdn.shopify.com/s/files/1/0165/4168/files/preview.png
125+
[cheatsheets5]: http://michael.peopleofhonoronly.com/vim/vim_cheat_sheet_for_programmers_screen.png

en/SUMMARY.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Summary
2+
3+
* [简介/导航](README.md)
4+
* [第一章 光标的移动](file-one.md)
5+
* [第二章 打开文件、查找内容](file-two.md)
6+
* [第三章 文档的修改与保存](file-three.md)
7+
* [第四章 一些小技巧](file-four.md)
8+
* [第五章 分屏与标签页](file-five.md)
9+
* [第六章 块操作](file-six.md)
10+
* [第七章 Vim 中的宏](file-seven.md)
11+
* [附1:Vim 插件](plugin.md)
12+
* [附2:插件推荐](plugins/index.md)
13+
* [NERDTree](plugins/nerdtree.md)
14+
* [EasyAlign](plugins/easyalign.md)
15+
* [AirLine](plugins/airline.md)
16+
* [surround.vim](plugins/surround.md)
17+

en/_config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
theme: jekyll-theme-hacker

en/file-five.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# 分屏与标签页
2+
3+
## 窗口分屏
4+
5+
工作中经常会遇到这种情况,就是需要参照其他文档编辑当前文档(场景:翻译),或者从另外一个文档
6+
copy 代码到当前文档(场景:复制 html 元素类名到 css 文档),这时候就是你最需要分屏的时候。
7+
8+
### 分屏方式
9+
10+
- `:split` 缩写 `:sp` or `Ctrl-w s` 上下分屏
11+
- `:vsplit` 缩写 `:vs` or `Ctrl-w v` 左右分屏
12+
- `:diffsplit` 缩写 `:diffs` diff 模式打开一个分屏,后面可以加上 {filename}
13+
14+
### 窗口跳转
15+
16+
- `Ctrl-w w` 激活下一个窗口
17+
- `Ctrl-w j` 激活下方窗口
18+
- `Ctrl-w k` 激活上方窗口
19+
- `Ctrl-w h` 激活左侧窗口
20+
- `Ctrl-w l` 激活右侧窗口
21+
22+
### 移动分屏
23+
24+
- `Ctrl-w L` 移动到最右侧
25+
- `Ctrl-w H` 移动到最左侧
26+
- `Ctrl-w K` 移动到顶部
27+
- `Ctrl-w J` 移动到底部
28+
29+
_注意:区分大小写。另外,可以将底部的屏幕移动到右侧,实现上下分屏到左右分屏的转换。_
30+
31+
### 屏幕缩放
32+
33+
- `Ctrl-w =` 平均窗口尺寸
34+
- `Ctrl-w +` 增加高度
35+
- `Ctrl-w -` 缩减高度
36+
- `Ctrl-w _` 最大高度
37+
- `Ctrl-w >` 增加宽度
38+
- `Ctrl-w <` 缩减宽度
39+
- `Ctrl-w |` 最大宽度
40+
41+
> 实践!实践!实践!
42+
43+
## 标签页
44+
45+
[第二章](file-two.md)中提到过的 buffer 和刚刚讲到的分屏操作都很适合在少量文件之间进行切换,
46+
文件超过 3 个我觉得就不方便了,而标签页则更适合多文件之间的切换。
47+
48+
### 创建标签页
49+
50+
- `:tabnew` or `:tabedit` 缩写 `:tabe` 打开新标签页
51+
- `Ctrl-w gf` 在新标签页中打开当前光标所在位置的文件名
52+
53+
_注意:`:tabnew``:tabedit` 后面都可以跟一个 <空格><文件名> 用以在新标签页中
54+
打开指定文件,还可以在 `:` 后面加一个数字,指出新标签页在列表中的位置(从 0 开始)。_
55+
56+
### 切换标签页
57+
58+
- `gt` or `:tabnext` 缩写 `:tabn` 下一个标签页(最后一个会循环到第一个)
59+
- `gT` or `:tabprevious` 缩写 `:tabp` 上一个标签页(第一个会循环到最后一个)
60+
- `:tabrewind` 缩写 `:tabr` or `:tabfirst` 缩写 `:tabfir` 到第一个
61+
- `:tablast` 缩写 `:tabl` 到最后一个标签页
62+
63+
### 关闭标签页
64+
65+
- `:tabclose` 缩写 `:tabc` 关闭当前标签页
66+
- `:-tabc` 关闭上一个标签页
67+
- `:+tabc` 关闭下一个标签页
68+
- `:tabonly` 缩写 `:tabo` 关闭其他标签页
69+
70+
[下一章](file-six.md)将介绍块操作。

en/file-four-demo.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function(win, doc) { // 光标定位到前面的{ 然后按 =%
2+
var n = ((1 + 2) * (3 + 4)) / 7;
3+
var a = [1, 2, 3, 4, 5, 6, 7];
4+
var f = function(b) {
5+
if(b) {
6+
return false;
7+
} else {
8+
return true;
9+
}
10+
};
11+
}

en/file-four.md

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# 一些小技巧
2+
3+
## 简单设置 Vim
4+
5+
“工欲善其事,必先利其器”。尽管 Vim 非常强大,但默认配置的 Vim 看起来还是比较朴素的,为了适合
6+
我们的开发需求,要对 Vim 进行一些简单的配置。
7+
8+
- `:set number` 显示行号
9+
- `:set relativenumber` 显示相对行号(这个非常重要,慢慢体会)
10+
- `:set hlsearch` 搜索结果高亮
11+
- `:set autoindent` 自动缩进
12+
- `:set smartindent` 智能缩进
13+
- `:set tabstop=4` 设置 tab 制表符所占宽度为 4
14+
- `:set softtabstop=4` 设置按 `tab` 时缩进的宽度为 4
15+
- `:set shiftwidth=4` 设置自动缩进宽度为 4
16+
- `:set expandtab` 缩进时将 tab 制表符转换为空格
17+
- `:filetype on` 开启文件类型检测
18+
- `:syntax on` 开启语法高亮
19+
20+
这里列出的是命令,你可以通过在 Vim 中输入进行设置,但这种方式设置的参数只在本次关闭 Vim 前生效,
21+
如果你退出 Vim 再打开,之前的设置就失效了。
22+
23+
若要永久生效,需要修改 Vim 的一个自动配置文件,一般文件路径是 `/home/<user>/.vimrc`(Linux
24+
系统)或 `/Users/<user>/.vimrc`(Mac OS 系统)
25+
26+
如果没有就新建一个,以 Mac OS 系统为例:
27+
28+
> 在控制台执行如下命令,每行结尾记得回车
29+
30+
```bash
31+
cd ~
32+
vim .vimrc
33+
```
34+
35+
> 现在你已经在 Vim 中打开了你的 Vim 专属配置文件,将上面提到的配置复制到你的文件中,记得要删除
36+
> 每行开头的 `:`
37+
>
38+
> 修改完成执行 `:wq` 或者 `ZZ` 保存退出,再次进入 Vim 时,你的这些配置就已经生效了
39+
>
40+
> 当然,机智如我也为你准备好了一份 [vimrc](vimrc.vim) 样本文件,你可以在控制台执行
41+
> `cp vimrc.vim ~/.vimrc` 直接使用,再次启动 Vim 或在 Vim 中执行 `:source ~/.vimrc`你的配置就
42+
> 应该生效了。
43+
44+
_**[ AD ]** 当然你也可以在我维护的另外一个项目 [The 7th Vim](https://github.com/dofy/7th-vim) 中找到一个更为完整的配置方案。_
45+
46+
## 清除搜索高亮
47+
48+
前面提到的配置中,有一项是高亮全部搜索结果 `:set hlsearch`,其作用是当你执行 `/`
49+
`?``*``#` 搜索后高亮所有匹配结果。
50+
51+
> 如果你已经设置了这个选项,尝试执行 `/set`
52+
53+
看到效果了吧,搜索结果一目了然,但这有时候也是一种困扰,因为知道搜索结果后高亮就没用了,但高亮
54+
本人并不这样认为,它会一直高亮下去,直到你用 `:set nohlsearch` 将其关闭。
55+
56+
但这样需要就打开,不需要就关闭也不是个办法,有没有更好的解决方案呢?当然!请看下面的终极答案:
57+
58+
> **再搜一个不存在的字符串**
59+
60+
通常我用来清除搜索高亮的命令是 `/lfw`,一是因为 `lfw` 这个组合一般不会出现(不适用于
61+
本文档...),二是这三个字母的组合按起来比较舒服,手指基本不需要怎么移动(你感受一下)。
62+
63+
## 重复上一次命令
64+
65+
Vim 有一个特殊的命令 `.`,你可以用它重复执行上一个命令。
66+
67+
> 按下面的说明进行操作
68+
69+
```
70+
按 dd 删除本行
71+
按 . 重复删除操作
72+
2. 再删除两行
73+
这行也没了
74+
p 把刚才删掉的粘回来
75+
3. 又多出 6 行
76+
```
77+
78+
## 缩进
79+
80+
- `>>` 向右缩进当前行
81+
- `<<` 向左缩进当前行
82+
83+
> 在这一行上依次按 `3>>``<<``<G` 看看效果
84+
>
85+
> 打酱油行
86+
87+
## 自动排版
88+
89+
- `==` 自动排版当前行
90+
- `gg=G` 当前文档全文自动排版
91+
- `<N>==` 对从当前行开始的 N 行进行自动排版
92+
- `=<N>j` 对当前行以及向下 N 行进行自动排版
93+
- `=<N>k` 对当前行以及向上 N 行进行自动排版
94+
95+
> 另外,还可以利用[第二章](file-two.md)中提到的匹配搜索对代码块进行批量排版,尝试用
96+
> `gf` 命令打开 [file-four-demo.js](file-four-demo.js) 按照里面的说明进行操作
97+
98+
如果智能缩进设置生效了,执行后会看到如[第二章](file-two.md)中一样的排版效果。
99+
100+
[下一章](file-five.md)将介绍分屏和标签页。

en/file-one.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# 光标的移动
2+
3+
欢迎进入第一章,这一章将学习简单的光标移动操作。
4+
5+
如果你已经有了一定基础,这部分可以略过,直接 `G` 到文档尾部按照操作进入下一章。
6+
7+
## 移动光标
8+
9+
### 单位级
10+
- `h` 向左一字符
11+
- `j` 下一行
12+
- `k` 上一行
13+
- `l` 向右一字符
14+
15+
### 单词级
16+
- `w` or `W` 向右移动到下一单词开头
17+
- `e` or `E` 向右移动到单词结尾
18+
- `b` or `B` 向左移动到单词开头
19+
20+
_注意:所有小写单词都是以分词符作为单词界限,大写字母以空格作为界限_
21+
22+
> 在下面字符块中感受一下各种移动吧!
23+
24+
```
25+
This project's GitHub url is https://github.com/dofy/learn-vim
26+
Please clone it to your local folder and open the first file which is
27+
named file-one.md via following command "vim file-one.md"
28+
and welcome to https://yahaha.net :)
29+
```
30+
31+
### 块级
32+
- `gg` 到文档第一行
33+
- `G` 到文档最后一行
34+
- `0` 到行首(第 1 列)
35+
- `^` 到第一个非空白字符
36+
- `$` 到行尾
37+
- `H` 移动到屏幕顶端
38+
- `M` 移动到屏幕中间
39+
- `L` 移动到屏幕底部
40+
- `Ctrl-d` 向下移动半页
41+
- `Ctrl-u` 向上移动半页
42+
- `Ctrl-f` 向下移动一页
43+
- `Ctrl-b` 向上移动一页
44+
- `:<N>` or `<N>gg` 跳转到第 N 行
45+
- `:+<N>` or `<N>j` 向下跳 N 行
46+
- `:-<N>` or `<N>k` 向上跳 N 行
47+
48+
_注意:所有命令前都可以加一个数字 N,表示对后面的命令执行 N 次,例如你想向下移动 3 行,除了
49+
可以用 `:+3` 之外,还可以用 `3j` 来实现同样的效果。另外,上面实际上有两种命令:一种是键入后
50+
立即执行的,比如 `gg`;还有一种是先输入 `:` 的(后面还会出现先按 `/` 的),这类命令需要在
51+
输入完成后按回车执行,后面的教程中也是一样。_
52+
53+
> 现在你可以在当前文件中畅游了,当你熟悉了各种移动操作后就可以通过 `G` 定位到当前文档到最后
54+
> 一行,按照提示进入下一章了。
55+
>
56+
> 将光标定位到后面文件名的任意位置上,直接敲键盘 `gf` 进入[第二章](file-two.md)

0 commit comments

Comments
 (0)