本文属于vim系列第一篇,介绍了vim常用的基本操作。
1 vim基础
vim基本操作
2 vi/vim使用进阶
vim进阶,插件配置
vi/vim使用进阶_u012906122的专栏-CSDN博客
3 vim-config
根据[vi/vim使用进阶]写的软件包
目录
1 编辑模式
1.1 跳转
// 当光标停留在一个单词上,* 键会在文件内搜索该单词,并跳转到下一处
*
// 当光标停留在一个单词上,# 在文件内搜索该单词,并跳转到上一处
#
// 将光标定位到文件第1行起始位置
gg
// 将光标定位到文件最后1行起始位置
G
// 将光标定位到第n行的起始位置
ngg
// 查看文件总行数和当前行数位置
ctrl+g
1.2 搜索匹配
// 正向搜索字符串 str1
/str1
// 继续搜索,找出 str1 字符串下次出现的位置
n
// 继续搜索,找出 str1 字符串上一次出现的位置
N
1.3 复制黏贴删除
// 单行复制
yy
// 多行复制
nyy
// 粘贴
p
// 单行删除
dd
// 多行删除
ndd
1.4 括号匹配及文字段落
// 从当前的括号跳转到与其匹配的括号上去,对花括号{}|圆括号()|方括号[]都有效
%
1.5 撤销和重复
// 撤消前一条命令的结果
u
// 重复最后一条修改正文的命令
.
2 插入模式
2.1 进入插入模式
// 在光标左侧插入正文
i
// 在光标右侧插入正文
a
// 在光标所在行的下一行增添新行
o
// 在光标所在行的上一行增添新行
O
3 命令模式
3.1 显示行号
// 临时显示行号
:set number
// 临时取消显示行号
:set nonumber
3.2 跳转
// 将光标移到第 n 行
:n
3.3 字符串搜索
// 正向搜索,将光标移到下一个包含字符串 str 的行(n)
:/str
3.4 高亮显示字符串
// 设置高亮搜索,.vimrc已经配置
:set hlsearch
// 'main'高亮显示
:/main
// 退出后去除高亮显示
:noh
3.5 字符串替换
g 放在命令末尾,表示对搜索字符串的每次出现进行替换,不止匹配每行中的第一次出现;不加g,表示只对搜索字符串的首次出现进行替换;s 表示后面跟着一串替换的命令;
// 用字符串str2替换正文中所有出现的字符串str1
:1,$ s/str1/str2/g
// 在n1与n2行之间查找str1替换为str2
:n1,n2 s/str1/str2/g
3.6 复制粘贴
// 将第9行至第15行的数据,复制到第16行
9,15 co 15
3.7 恢复文件
意外退出vim,*.swp说明.假如编辑后没保存,意外退出vim:
.swp:
vim Android.mk:
解释下:
(i)Edit anyway:只编辑保存过的内容
(ii)Recover:恢复未保存的内容
(iii)Delete it:删除*.swp文件
3.8 Shell切换
// 执行完 shell_command 后回到Vim
:!shell_command
:!ls -l
3.9 分屏
https://www.cnblogs.com/bugutian/p/4498326.html
// 上下分屏
:split(可用缩写 :sp)
:sp ./Android.mk
// 左右分屏
:vsplit(可用缩写 :vsp)
:vsp ./Android.mk
// 在窗口间跳转
ctrl+w
3.10 文件比较
// 上下分屏
:diffsplit abc.txt
// 左右分屏
:vert diffsplit abc.txt
4 ctags
4.1 系统函数
使用shift+K会自动跳转
4.2 自定义函数
需要提前配置ctags:
(i)生成索引文件
hyh3333@arc-R730:~/sdm845_la2.0$ ctags -R *
(ii)ctags配置
使用vim ~/.vimrc 编辑vim的配置文档,在其中加入如下命令:
// 注意不能":set tags = /test_vim/tags"
:set tags=/test_vim/tags
(iii)vimrc配置多个ctags文件
:set tags+=/test_tmp/tags
使用:
(1)Linux命令行
#vim -t XXX //查找XXX变量或函数
vim -t PreApplicationInit
(2)编辑模式
ctrl + ] //调到光标所在函数或结构体的定义处
ctrl + t //返回查找
(3)命令模式
:ts //tagslist
:tp //tagspreview
:tn //tagsnext
#vim –t tag:
在运行vim的时候加上“-t”参数,例如:vim - t func这个命令将打开定义func(变量或函数或其它)的文件,并把光标定位到这一行。
如果这个变量或函数有多处定义,在vim命令行模式:ts命令就能列出一个列表供用户选择。
:tp为上一个tag标记文件,:tn为下一个tag标记文件。
当然,若当前tags文件中用户所查找的变量或函数名只有一个,:tp,:tn命令不可用。
ctrl+]:
最方便的方法是把光标移到变量名或函数名上,然后ctrl+],这样就能直接跳到这个变量或函数定义的源文件中,并把光标定位到这一行。
用ctrl+t可以退回原来的地方。
即使用户使用了N次ctrl+]查找了N个变量,按N次ctrl+t也能回到最初打开的文件,它会按原路返回。
ctrl+]可以和:ts :tp :tn共同合作.
5 其他补充
5.1 vim 复制文件中多行到另一个文件
100,200y
:vsp
ctrl + w +w
p
5.2 vim复制单个单词
// 复制当前单词到寄存器
viw
y
p
5.3 选中部分字符串
v...y 部分复制
v...x 部分剪切
v...d 部分删除
v...yy 复制到剪切板
5.4 使用及配置剪贴板
clipboard的安装:
https://www.cnblogs.com/qiyuexin/p/7057686.html
vim 有12个粘贴板依次编号为:0、1、2、...、9、a、"、+,其中 + 号为系统粘贴板,” 为临时粘贴板。系统剪切板中的内容可在其他程序中使用。上面的复制指令都可以配合剪切板进行操作:
"nyw 复制当前单词到 n 号剪切板(双引号开始)
"np 粘贴 n 号剪切板内容到当前位置后
插件配置~/.vimrc:
// ctrl+c:复制当前单词
nmap <c-v> "+1p
// ctrl+c:黏贴
nmap <c-c> "+1yw
// ctrl+d:删除当前单词
nmap <c-d> viwd