源码编译
获取代码并编译
1
2
3
4
5
| git clone https://github.com/vim/vim.git
cd vim/src
./configure --prefix=~/opt/usr/local/
make
make install
|
修改PATH
1
2
| ~/.bashrc
export PATH=~/usr/local/bin:$PATH
|
使用方法记录
有注释时粘贴代码自动换行导致错乱问题
1
2
3
4
| 粘贴代码时对齐问题
set paste
取消
set nopaste
|
修改文件类型
set fileformat=unix
设置字符可见模式,以^I表示一个tab符,$表示一个回车符等
set invlist
回到正常模式
set nolist
1
2
3
| :%!xxd 查看十六进制
:set nolist 回到正常模式
:set invist ^I 表示tab,$表示回车符
|
查找与替换
替换语法:[addr]s/源字符串/目的字符串/[option]
- [addr]表示检索范围,如:
- “1,n”:表示从第1行到n行
- “%":表示整个文件,同"1,$”
- “.,$":表示从当前行到文件尾
- [addr]省略时表示当前行
- s:表示替换操作,其为substitute的缩写
- [option] : 表示操作类型,如:
- g:globe,表示全局替换
- c:confirm,表示进行确认
- p:表示替代结果逐行显示(Ctrl + L恢复屏幕)
- i:ignore,不区分大小写
- [option]省略时仅对每行第一个匹配串进行替换
如果在源字符串和目的字符串中出现特殊字符,如’/’,’<’,’>’,’,‘等需要前面加反斜杠\进行转义
常用命令示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| #将当前行第一个a替换为b
:s/a/b/
#将当前行的所有a替换为b
:s/a/b/g
#将每行第一个a替换为b
:%s/a/b
#将整个文件的所有a替换为b
:%s/a/b/g
#将1至3行的第一个a替换为b
:1,3s/a/b/
#将1至3行的所有a替换为b
:1,3s/a/b/g
上面是一些常用的替换,但是我们日常碰到的问题不止这么简单,这就要涉及到一些较为高级的替换操作,会涉及到转义,正则表达式相关的知识,下面是一些例子:
#使用#作为分隔符,此时中间出现的/不会作为分隔符,如:将当前行的字符串"a/"替换为"b/"
:s#a/#b/#
#找到包含字母a的行并删除
:g/a/d
#删除所有空行
:g/^$/d
#多个空格替换为一个空格
:s/ \+/ /g
#在正则表达式中使用和和符号括起正则表达式,即可在后面使用\1,\2等变量来访问和和中的内容,如下
将data1 data2修改为data2 data1
:s/\w\+\w\+\s\+\w\+\w\+/\2\t\1
|
vimgrep的使用方法
vimgrep /匹配模式/[g][j]
要搜索的文件/范围
默认使用vim作为vimgrep命令缩写
匹配模式可以使用正则
g: 表示是否把每一行的多个匹配结果都加入
j: 表示是否搜索完后定位到第一个匹配位置
vimgrep /pattern/ %
在当前打开文件中查找
vimgrep /pattern/ *
在当前目录下查找所有
vimgrep /pattern/ **
在当前目录及子目录下查找所有
vimgrep /pattern/ *.c
查找当前目录下所有.c文件
vimgrep /pattern/ **/*
只查找子目录
cn 查找下一个
cp 查找上一个
copen 打开quickfix
cw 打开quickfix
cclose 关闭quickfix
help 查看vimgrep帮助
vimdiff
vimdiff 等同于 vim -d 命令,即 Vim 编辑器的 diff 模式。
可以使用下列两种快捷键,在文件的各个差异点之间前后移动:
1
2
| ], c:跳转到下个差异点
[, c:跳转到上个差异点
|
内容合并
d, p
(即 diff put)命令,将当前差异点中的内容覆盖到另一文件中的对应位置。
如当光标位于左侧文件(file1)中的第一行时,依次按下 d、p 键,则 file1 中的 Line one 被推送到右侧,并替换掉 file2 中对应位置上的 Line 1 。d, o
(即 diff obtain)命令可以将另一窗口中差异点处的内容拉取到当前位置并进行替换操作。
打开多个文件
vim -O2 file1 file2
多个窗口切换
1
2
3
| Ctrl-w, l:光标切换到右侧的窗口
Ctrl-w, h:光标切换到左侧的窗口
Ctrl-w, w:光标在两个窗口间彼此切换
|
tab标签页管理
管理tab标签页
1
2
3
4
5
6
| :tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
|
其它命令
1
2
3
4
5
6
| :qa:退出所有文件
:wa:保存所有文件
:wqa:保存并退出所有文件
qa!:强制退出(不保存)所有文件
z o:查看被折叠的内容
z c:重新折叠
|
修改文件换行方式
问题及解决方法
- vim 光标停留在上次退出位置 需要确保~/.viminfo 权限没有问题,并查看以下配置是否添加
1
2
3
| if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
|
部分插件使用说明
vim-plug
用于管理插件的插件
1
2
3
| :PlugInstall 安装插件
:PlugUpdate 更新插件
:PlugUpgrade 升级vim-plug
|
vim-plug下载
1
2
| curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|