mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-11-30 14:58:04 +03:00
239 lines
7.0 KiB
Markdown
239 lines
7.0 KiB
Markdown
---
|
||
category: tool
|
||
tool: vim
|
||
filename: LearnVim-cn.txt
|
||
contributors:
|
||
- ["RadhikaG", "https://github.com/RadhikaG"]
|
||
translators:
|
||
- ["Jiang Haiyun", "https://github.com/haiiiiiyun"]
|
||
lang: zh-cn
|
||
---
|
||
|
||
|
||
[Vim](http://www.vim.org)
|
||
(Vi IMproved) 是 Unix 上的流行编辑器 vi 的克隆版本。这个文本编辑器
|
||
是为性能和提升效率而设计的,并且在大多数基于 unix 的系统上普遍存在。
|
||
它有大量的快捷键可用来快速导航到文件的特定位置,以便进行快速编辑。
|
||
|
||
## Vim 导航基础
|
||
|
||
```
|
||
vim <filename> # 在 Vim 中打开 <filename>
|
||
:q # 退出 Vim
|
||
:w # 保存当前文件
|
||
:wq # 保存文件并退出 Vim
|
||
:q! # 退出 Vim 并且不保存文件
|
||
# ! *强制* 执行 :q, 因此没有保存就退出 Vim
|
||
:x # 保存文件并且退出 Vim, 是 :wq 的简写版本
|
||
|
||
u # 撤销
|
||
CTRL+R # 重做
|
||
|
||
h # 左移一个字符
|
||
j # 下移一行
|
||
k # 上移一行
|
||
l # 右移一个字符
|
||
|
||
# 在行内移动
|
||
|
||
0 # 移到行首
|
||
$ # 移到行尾
|
||
^ # 移到行内的第一个非空白字符处
|
||
|
||
# 在文本中查找
|
||
|
||
/word # 光标之后的所有该词都高亮显示
|
||
?word # 光标之前的所有该词都高亮显示
|
||
n # 查找后将光标移到该词的下一个出现位置
|
||
N # 光标移到该词的上一个出现位置
|
||
|
||
:%s/foo/bar/g # 将文件每一行上的所有 'foo' 都改成 'bar'
|
||
:s/foo/bar/g # 将当前行上的所有 'foo' 都改成 'bar'
|
||
|
||
# 跳到字符处
|
||
|
||
f<字符> # 向前跳移到 <字符> 上
|
||
t<字符> # 向前跳移到 <字符> 的左侧
|
||
|
||
# 例如,
|
||
f< # 向前跳移到 < 上
|
||
t< # 向前跳移到 < 的左侧
|
||
|
||
# 按词移动
|
||
# 默认一个单词由字母,数字和下划线组成
|
||
|
||
w # 移动到下一个词首
|
||
b # 移动到前一个词首
|
||
e # 移动到下一个词尾
|
||
|
||
|
||
# 移动的其它命令
|
||
|
||
gg # 移到文件顶部
|
||
G # 移到文件末尾
|
||
:NUM # 移到第 NUM 行 (NUM 是任意数字)
|
||
H # 移到屏幕顶部
|
||
M # 移到屏幕中间位置
|
||
L # 移到屏幕末尾
|
||
```
|
||
|
||
## 模式:
|
||
|
||
Vim 基于 **模式** 这个概念。
|
||
|
||
命令模式 - Vim 启动后就处于这个模式,用于导航和操作命令
|
||
插入模式 - 用于在你的文件中进行修改
|
||
可视模式 - 用于高亮文本并对它们进行操作
|
||
Ex 模式 - 用于跳到底部的 ':' 提示行上输入命令
|
||
|
||
```
|
||
i # 在光标位置前,将 Vim 切换到插入模式
|
||
a # 在光标位置后,将 Vim 切换到插入模式
|
||
v # 将 Vim 切换到可视模式
|
||
: # 将 Vim 切换到 ex 模式
|
||
<esc> # 无论你当前处于什么模式,都返回到命令模式
|
||
|
||
# 复制和粘贴文本
|
||
|
||
y # 复制所选的内容
|
||
yy # 复制当前行
|
||
d # 删除所选的内容
|
||
dd # 删除当前行
|
||
p # 在当前光标位置后粘贴复制的文本
|
||
P # 在当前光标位置前粘贴复制的文本
|
||
x # 删除当前光标位置处的字符
|
||
```
|
||
|
||
## Vim 的 '语法'
|
||
|
||
Vim 可以被认为是按 '动词-修饰词-名词' 格式编排的一组命令:
|
||
|
||
动词 - 你的动作
|
||
修饰词 - 你如何执行你的动作
|
||
名词 - 你的动作所作用于的对象
|
||
|
||
关于 '动词','修饰词',和 '名词' 的几个重要例子:
|
||
|
||
```
|
||
# '动词'
|
||
|
||
d # 删除
|
||
c # 修改
|
||
y # 复制
|
||
v # 可视化选择
|
||
|
||
# '修饰词'
|
||
|
||
i # 内部的
|
||
a # 周围的
|
||
NUM # 数字 (NUM 是任意数字)
|
||
f # 查找文本并位于其上
|
||
t # 查找文本并停于其前面
|
||
/ # 从光标处开始查找字符串
|
||
? # 在光标前查找字符串
|
||
|
||
# '名词'
|
||
|
||
w # 词
|
||
s # 句子
|
||
p # 段落
|
||
b # 块
|
||
|
||
# 示例 '语句' 或命令
|
||
|
||
d2w # 删除 2 个词
|
||
cis # 修改段落内的内容
|
||
yip # 复制段落内的内容 (复制你所在的段落)
|
||
ct< # 修改直到括号开启处
|
||
# 对你的当前位置直到下个括号开启处的内容进行修改
|
||
d$ # 删除直到行尾
|
||
```
|
||
|
||
## 一些快捷键和技巧
|
||
|
||
<!--TODO: Add more!-->
|
||
```
|
||
> # 将所选内容缩进一级
|
||
< # 将所选内容取消缩进一级
|
||
:earlier 15m # 将文档还原到 15 分钟前的状态
|
||
:later 15m # 逆转上述命令
|
||
ddp # 相邻行交换位置,先 dd 再 p
|
||
. # 重复之前动作
|
||
```
|
||
|
||
## 宏
|
||
|
||
宏基本上来说就是可录制的动作。
|
||
当你开始录制宏时,它会记录你使用的 **每个** 动作和命令,
|
||
直到你停止录制。当调用宏时,它会将这个完全相同的动作和命令序列
|
||
再次应用于所选文本之上。
|
||
|
||
```
|
||
qa # 开始录制一个叫 'a' 的宏
|
||
q # 停止录制
|
||
@a # 重播宏
|
||
```
|
||
|
||
### 配置 ~/.vimrc
|
||
|
||
.vimrc 可用于在启动时对 Vim 进行配置。
|
||
|
||
这里是一个示例 ~/.vimrc 文件:
|
||
|
||
```
|
||
" 示例 ~/.vimrc
|
||
" 2015.10
|
||
|
||
" 需要 Vim iMproved 版本
|
||
set nocompatible
|
||
|
||
" 根据文件名检测文件类型,以便能进行智能自动缩进等操作。
|
||
filetype indent plugin on
|
||
|
||
" 开启语法高亮
|
||
syntax on
|
||
|
||
" 更好的命令行补全
|
||
set wildmenu
|
||
|
||
" 除了当使用大写字母时使用大小写无关查找
|
||
set ignorecase
|
||
set smartcase
|
||
|
||
" 当新开一行时,如果没有开启文件特定的缩进规则,
|
||
" 则缩进保持与你当前行一致
|
||
set autoindent
|
||
|
||
" 在左侧显示行号
|
||
set number
|
||
|
||
" 缩进选项,根据个人偏好进行修改
|
||
|
||
" 每个 TAB 的可视空格数
|
||
set tabstop=4
|
||
|
||
" 编辑时 TAB 对应的空格数
|
||
set softtabstop=4
|
||
|
||
" 当使用缩进操作 (>> 和 <<) 时缩进的空格数
|
||
set shiftwidth=4
|
||
|
||
" 将 TAB 转换成空格
|
||
set expandtab
|
||
|
||
" 为缩进和对齐开启智能化的 TAB 和空格切换功能
|
||
set smarttab
|
||
```
|
||
|
||
### 参考
|
||
|
||
[Vim | Home](http://www.vim.org/index.php)
|
||
|
||
`$ vimtutor`
|
||
|
||
[A vim Tutorial and Primer](https://danielmiessler.com/study/vim/)
|
||
|
||
[What are the dark corners of Vim your mom never told you about? (Stack Overflow thread)](http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about)
|
||
|
||
[Arch Linux Wiki](https://wiki.archlinux.org/index.php/Vim)
|