334 lines
8.8 KiB
Markdown
334 lines
8.8 KiB
Markdown
可以通过命令**vimtutor**学习。
|
||
|
||
#### 语法
|
||
|
||
```
|
||
vim [options] [file ..] # 编辑指定文件
|
||
vim [options] - # 从标准输入读取文本
|
||
vim [options] -t tag # 编辑tag所在文件
|
||
vim [options] -q [errorfile] # 编辑首先出错的文件
|
||
```
|
||
|
||
#### 选项
|
||
|
||
```
|
||
+[num] # 打开文件后光标停留在num行
|
||
-b # 二进制模式。这样文件末尾就不会自动加上'0x0a'了。(0x0a即'\n')
|
||
-d # 比较多个文件的差异。等价于vimdiff。
|
||
-o[N] # 横向分屏打开文件。忽略N,则每个文件对应一个分屏。
|
||
-O[N] # 纵向分屏打开文件。忽略N,则每个文件对应一个分屏。
|
||
-R # 只读模式。等价于view。
|
||
```
|
||
|
||
#### 使用示例
|
||
|
||
##### 修改
|
||
|
||
```
|
||
i //当前字符的前面插入
|
||
a //当前字符的后面插入
|
||
ce //修改到单词末尾(即删除当前光标到单词末尾的字符,并转为插入模式)
|
||
cw //修改单词
|
||
c$ //修改到行末
|
||
:r // 在光标处插入内容,可以来自于文件,也可能来自于命令输出
|
||
rx //用x替换当前光标处的字符
|
||
```
|
||
|
||
##### 删除
|
||
|
||
```
|
||
d1G # 从文件开头删除到当前行
|
||
dG # 从当前行删除到文件末尾
|
||
dd # 删除整行
|
||
d$ # 删除到行末(包括本行的最后一个字符)
|
||
dw # 删除一个单词(包括下一个单词之前的字符)
|
||
de # 删除一个单词(包括本单词的最后一个字符)
|
||
x # 删除单个字符
|
||
:n,.d # 删除从第n行到当前行的所有内容
|
||
:.,$d # 删除从当前到最后一行的所有内容
|
||
:1,$d # 删除当前文档的全部内容
|
||
```
|
||
|
||
##### 复制、剪切、粘贴
|
||
|
||
```
|
||
y # 复制
|
||
yy # 复制一行
|
||
nyy # 复制n行
|
||
d # 剪切
|
||
dd # 剪切一行
|
||
ndd # 剪切n行
|
||
p # 粘贴
|
||
"+y # 复制到系统剪切板
|
||
"+p # 从系统剪切析粘贴
|
||
|
||
# 复制粘贴的内容保存在一个叫vim寄存器的地方,可通过如下命令查看寄存器及其内容
|
||
:reg
|
||
# 其中""是默认寄存器,最近一次复制、剪切、粘贴操作保存于此
|
||
# "0保存了最近一次复制的内容
|
||
# "1~9分别保存了最近1~9次剪切的内容
|
||
# "a~z供用户使用
|
||
# "+或"*为系统剪切板,跨进程的复制、剪切、粘贴要用到它
|
||
|
||
# 让vim支持系统剪切板
|
||
vim --version | grep clipboard # 首先查询是否支持,-clipboard不支持,+clipboard支持
|
||
sudo apt install vim-gtk # 对于Ubuntu安装vim-gtk可使vim支持系统剪切板
|
||
```
|
||
|
||
##### 搜索
|
||
|
||
```
|
||
* # 向后查找光标所在处的单词
|
||
# # 向前查找光标所在处的单词
|
||
f<char> # 向后搜索<char>,光标出现在<char>后面
|
||
t<char> # 向后搜索<char>,光标出现在<char>前面
|
||
F<char> # 向前搜索<char>,光标出现在<char>后面
|
||
T<char> # 向前搜索<char>,光标出现在<char>前面
|
||
/ # 搜索,从上向下
|
||
? # 搜索,从下向上
|
||
/\C # 搜索,大小写敏感
|
||
/\c # 搜索,大小写不敏感
|
||
# ignorecase和smartcase可以控制搜索时大小写敏感的问题
|
||
:set ignorecase # 大小写不敏感
|
||
:set ignorecase! # 大小写敏感
|
||
:set noignorecase # 大小写敏感
|
||
:set ignorecase? # 查询是否设置了ignorecase
|
||
```
|
||
|
||
##### 选择
|
||
|
||
```
|
||
v # 选择,以字符为单位
|
||
V # 选择,以行为单位
|
||
```
|
||
|
||
##### 替换
|
||
|
||
```
|
||
:s/vivian/sky/ //替换当前行第一个vivian为sky
|
||
:s/vivian/sky/g //替换当前行所有vivian为sky
|
||
:%s/[a-z]//ig //删除文档中所有字母,且忽略大小写
|
||
:%s/old/new/gc //查找全部文件,并提示是否把old替换为new
|
||
:%s/^\s\+// //替换行首的所有空白字符,空白字符指空格或tab
|
||
:n,$s/vivian/sky //从第n行到最后一行替换第一个vivian为sky
|
||
```
|
||
|
||
##### 正则表达式
|
||
|
||
```
|
||
:g/{pattern}/{cmd} //对所有满足{pattern}的行执行{cmd}命令
|
||
:g/someword/d //删除所有包含someword的行
|
||
```
|
||
|
||
##### 缩进
|
||
|
||
```bash
|
||
# normal模式
|
||
>> # 增加缩进
|
||
<< # 减少缩进
|
||
# 命令模式
|
||
:10,100> # 10~100行增加缩进
|
||
:20,80< # 20~80行减少缩进
|
||
# visual模式
|
||
6> # 缩进6次
|
||
```
|
||
|
||
|
||
|
||
##### 撤销
|
||
|
||
```
|
||
u //撤销
|
||
U //撤销对整行的修改
|
||
Ctrl+r //反撤销
|
||
```
|
||
|
||
|
||
|
||
##### 分割屏幕
|
||
|
||
```
|
||
:vsp filename # 纵向分屏,并打开文件filename
|
||
:sp filename # 横向分屏,并打开文件filename
|
||
ctrl+w+[hjkl] # 分屏左下上右切换
|
||
ctrl+w+[qc] # 关闭光标所在的分屏
|
||
ctrl+w+v # 对当前的文件左右分屏
|
||
ctrl+w+s # 对当前的文件上下分屏
|
||
ctrl+w+w # 在分屏之间切换
|
||
:open filename # 打开文件filename
|
||
:ls # 显示已打开的文件
|
||
:bn # 切换文件
|
||
:bp # 切换文件
|
||
:bd # 关闭文件
|
||
```
|
||
|
||
##### 移动光标
|
||
|
||
```
|
||
% //跳转到与光标处括号相匹配的另一个括号
|
||
G //跳转到文尾
|
||
nG //跳转到第n行
|
||
gg //跳转到文首
|
||
j //向下移动
|
||
k //向上移动
|
||
h //向左移动
|
||
l //向右移动
|
||
ctrl+f // 向下翻页,front
|
||
ctrl+b // 向上翻页,back
|
||
ctrl+d // 向下翻半页,down
|
||
ctrl+u // 向上翻半页,up
|
||
|
||
w # 移动到下个单词的第一个字符
|
||
e # 移动到下个单词的最后一个字符
|
||
b # 移到上一个单词
|
||
0 # 移动到行首
|
||
$ # 移动到行尾
|
||
```
|
||
|
||
##### 显示控制
|
||
|
||
```
|
||
:set number //显示行号
|
||
:set nonumber // 不显示行号
|
||
ctrl+g //显示在文件中的位置与文件信息
|
||
```
|
||
|
||
##### 编辑文件
|
||
|
||
```
|
||
:e[dit] [++opt] [+cmd] # 编辑当前文件。可用于重新编辑当前文件的情况。
|
||
:e[dit]! [++opt] [+cmd] # 放弃当前缓冲区里的修改,强制编辑当前文件。
|
||
# [++opt]里的opt可以是如下内容:
|
||
ff, fileformat # 覆盖'fileformat'
|
||
enc, encoding # 覆盖'fileencoding'
|
||
bin, binary # 设置'binary'
|
||
nobin, bobinary # 重新设置'binary'
|
||
bad # 定义碰到坏字符后采取的行为
|
||
edit #
|
||
```
|
||
|
||
|
||
|
||
##### 文件保存
|
||
|
||
```
|
||
:w[rite] [++opt] # 把缓冲区的内容写入到当前文件。对于[++opt]来说,仅++bin, ++nobin, ++ff和++enc有效。
|
||
:w filename # 另存为
|
||
:w !sudo tee % # 以超级用户的身份保存文件。%代表当前文件名,tee命令把stdin保存到文件中
|
||
```
|
||
|
||
##### 执行外部命令
|
||
|
||
```bash
|
||
:!command // 执行外部命令command
|
||
:%!xxd //以16进制形式查看文档,%表示文件的所有行,!xxd表示执行xxd命令
|
||
:%!xxd -r //将修改的内容反写回源文件
|
||
```
|
||
##### 其它命令
|
||
|
||
```
|
||
; # 执行上一次操作
|
||
```
|
||
|
||
|
||
|
||
#### 设置
|
||
|
||
作用于整个系统的配置文件在`/etc/vimrc`,作用于单个用户的配置文件在`~/.vimrc`。
|
||
|
||
##### 字符编码
|
||
|
||
四个与字符编码相关的选项:
|
||
|
||
| 名称 | 意义 |
|
||
| ------------- | ------------------------------------------------------------ |
|
||
| encoding | vim内部使用的编码方式,默认为locale的值,只有在.vimrc中设置它的值才有意义 |
|
||
| fileencoding | 当前编辑的文件的字符编码 |
|
||
| fileencodings | 一个字符编码的列表,启动时将依据列表自动探测文件的编码方式 |
|
||
| termencoding | vim所工作的终端的字符编码方式 |
|
||
|
||
##### 文件格式
|
||
|
||
dos或windows通过CRLF来换行,Linux和Mac通过LF来换行。可以通过`fileformats`来控制文件格式。
|
||
|
||
```
|
||
:set fileformats=dos # 使用windows的文件格式
|
||
:set fileformats=unix # 使用linux的文件格式
|
||
```
|
||
|
||
##### 高亮行或列
|
||
|
||
```
|
||
:set cursorcolumn
|
||
:set cursorline
|
||
```
|
||
|
||
|
||
|
||
##### 配色方案
|
||
|
||
可选的配色方案详见`/usr/share/vim/vim81/colors`
|
||
|
||
```
|
||
colorscheme murphy
|
||
```
|
||
|
||
##### 语法高亮
|
||
|
||
```
|
||
syntax on
|
||
```
|
||
|
||
##### 缩进
|
||
|
||
与自动缩进相关的变量
|
||
|
||
| 变量名 | 缩写 | 含义 |
|
||
| --------------- | ------ | ------------------------ |
|
||
| (no)autoindent | (no)ai | 是否自动缩进 |
|
||
| (no)cindent | (no)ci | 是否像C语言一样地缩进 |
|
||
| (no)smartindent | (no)si | 基于autoindent的一些改进 |
|
||
|
||
与TAB相关的变量
|
||
|
||
| 变量名 | 缩写 | 含义 |
|
||
| ------------- | ------- | ----------------------------------------- |
|
||
| tabstop | ts | 一个TAB占多少个空格 |
|
||
| shiftwidth | sw | 每层缩进的空格数 |
|
||
| (no)expandtab | (no)et | 是否将tab展开成空格 |
|
||
| softtabstop | sts | 按下退格键将删除指定数量的空格 |
|
||
| (no)smarttab | (no)sta | 首行按tab键的时侯,空格数是来自于ts还是sw |
|
||
|
||
配置示例
|
||
|
||
```
|
||
# 1个tab键变成4个空格
|
||
vim ~/.vimrc
|
||
set ts=4
|
||
set et
|
||
set ai
|
||
```
|
||
|
||
#### 插件
|
||
|
||
##### taglist
|
||
|
||
```
|
||
# 1. 下载taglist_46.zip,这是最新的。
|
||
# 2. 解压到~/.vim目录
|
||
unzip taglist_64.zip ~/.vim
|
||
# 3. 生成帮助文档
|
||
cd ~/.vim && vim # 输入“:helptags .”命令
|
||
|
||
# 用法
|
||
:Tlisttoggle # 是否开启列表显示
|
||
ctrl+w+w # 列表区和文本区切换
|
||
```
|
||
|
||
|
||
|
||
#### 常见错误
|
||
|
||
- 在shell下`Ctrl+s`不是保存文件,而是暂停该终端,此时对终端的所有操作均无效。需要`Ctrl+q`退出当前状态。
|
||
- 在shell下Ctrl+z是将该任务挂起了,可以输入`fg`继续之前的编辑。
|