文章目录
文章:https://juejin.cn/post/7084462939595341831
命令模式
-
join
:选中你要进行合并一行的代码块,命令输入join即可变成一行 -
put
:比如10put=aaaa
那么就会在文件第10行写入aaaa - https://xu3352.github.io/linux/2018/10/21/practical-vim-skills-chapter-5
技巧
格式化代码
选中要格式化的代码按下等号=
即可格式化代码
调试
日志调试:https://harttle.land/2018/12/05/vim-debug.html
编辑多个文件
在工程目录时比如cpp工程:
#使用vim *.cpp *.hpp 将源文件、头文件添加进入vim缓存区
vim *.cpp *.hpp
#使用vim命令:vsplit(简写vsp,sp即竖直方向)水平方向复制一个当前窗口
:vsp #或者也可以使用 :new 打开一个没有文件新窗口
#使用:ls命令即可查看所有的缓冲区的文件,再通过:b [编号、文件名]即可打开文件进行编辑
#强大的是,b可以接受模糊匹配,比如b main,则会之间打开main.cpp文件
#或者可以利用命令提示符<Tab>来显示所有的文件列表
:b <Tab> #快捷方式可以通过<Ctrl>+^来切换该窗口编辑过的文件
#然后可以之间使用<Ctrl>+w 来跳转不同的窗口
生成序列
1. 通过read命令读取shell命令结果(适用于生成纯数字序号)
-
read
可以简写成r
-
!
表示执行shell
命令
vim -c "r !seq 10" demo
#read命令读取shell下seq执行结果的值并写入文件
#关于seq命令用法
#从1到10的顺序:
seq 10
#从5到20的每3个数字:
seq 5 3 20
#用空格而不是换行符分隔输出:
seq -s “” 5 3 20
#根据需要将输出宽度设置为最少4位数字,并用零填充:
seq -f "%04g" 5 3 20
有了read命令
你可以把vim当成半个控制台
来玩,比如在文件里面“查看”当前的列表文件
vim demo
#进入空文件
:r !ls
#执行vim命令
2. vim命令(适用于穿插字符替换为序号)
- vim在执行命令后会读取
put
变量的值并且写入到文件中(建议使用r !seq 100
)
vim -c "for i in range(1,100)|put=i|endfor" demo
#会生成一个具有101行且首行按1-100排序的文件
vim -c "for i in range(1,100)|0put=i|endfor" demo
#倒序
vim -c "for i in range(1,100)|put='a'|endfor" demo
#生成100个'a'
- 在选中的地方进行替换并且生成序号(重点!!!)
- 比如说我操作markdown文件时我需要把10行文本变成有序列表
存在如下字符:
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
#首先v选中你要修改的区域
:'<,'>s/\%V/\=printf("%d. ",line(".")-line("'<")+1) #这个是完整命令 或者把"\%V"替换成"^"又或者你"不写"也是ok的
:'<,'>s/\%V/\=printf("%d. ",line(".")-9) #为了方便可以直接手动改,比如你在第10行就写9
- 替换字符串中间的字符为序号
存在如下字符:
"https://segmentfault.com/a/1/main.html"
"https://segmentfault.com/a/1/main.html"
"https://segmentfault.com/a/1/main.html"
"https://segmentfault.com/a/1/main.html"
#1. 那么首先复制20个一样的出来
直接按yy + 19p就可以了
#2. 然后需要用到<Ctl+v>进行单行选中,
光标移动到“1”这里,按<Ctl+v> 再按19j
#3.选中了20行的"1"后,按":"进入命令模式,会出现":'<,'>"和普通模式的":"不一样
输入命令":'<,'>s/1/\=printf("%d",line(".")-line("'<")+1)"
大小写替换
gU 将它们大写。gu 会将它们小写
插件
批量单行注释
- 光标移到行首
- 按
conrol + v
会出现视图模式的选中光标 - 上下移动选中你要批量编辑的行数
- 按
shift + i
即可进入输入模式 - 输入你想编辑的内容(注释就是输入
//
) - 最后按
esc
即可生成批量单行注释
上面的步骤不能错,错了就弄不出来
批量块注释代码
在视图模式中选中你要注释的代码块,然后:
输入命令即可全部注释,再次执行命令即可取消注释
需要安装插件Plug 'tpope/vim-commentary'
:Commentary
make命令
可以直接调用shell
执行make
,好像:!make
也可以。。。。
lua格式化代码
需要搭建环境:https://www.cnblogs.com/shangmo/p/16139098.html
语法检查
插件Plug 'scrooloose/syntastic'
当窗口有错误箭头提示时,输入:Errors
即可查看具体错误信息
代码目录
Plug 'majutsushi/tagbar'
需要执行:Tagbar
命令
#报错如下
#BSD ctags will NOT WORK. Please download Exuberant Ctags from ctags.sou rceforge.net and install it in a directory in your $PATH or set g:tagba r_ctags_bin.
#修复
brew install ctags-exuberant
多余的空格自动报红(适用于强迫症的)
Plug 'bronson/vim-trailing-whitespace'
代码风格(比如回车自动锁进)
Plug 'editorconfig/editorconfig-vim'
缩进线条
Plug 'Yggdroot/indentLine'
自动提示代码
一般如果没有安装任何源,则自动补全只会根据当前文件已有的名字进行猜测
-
Plug 'zchee/deoplete-jedi'
python -
Plug 'Shougo/deoplete-clangx'
C/C++
还需要安装库
# 安装vim的Python-client库pynvim
pip3 install --user pynvim
# 安装插件 python的neovim库
pip3 install --user neovim
打开目录窗口(适合作为ide使用)
Plug 'scrooloose/nerdtree'
用于工程编辑模式脚本
#!/bin/bash
files=()
list=(c cpp h hpp)
detection(){
local kind=$1
tmp=$(ls | grep "\.${kind}$")
if [ -n "$tmp" ];then
files+=$tmp
fi
}
for i in ${list[@]};do
detection $i
done
nvim $files -c "vsplit" -c "b2"
echo "IyEvYmluL2Jhc2gKCmZpbGVzPSgpCmxpc3Q9KGMgY3BwIGggaHBwKQoKZGV0ZWN0aW9uKCl7Cglsb2NhbCBraW5kPSQxCgl0bXA9JChscyB8IGdyZXAgIlwuJHtraW5kfSQiKQoJaWYgWyAtbiAiJHRtcCIgXTt0aGVuCQlmaWxlcys9IiR0bXAgIjtmaQp9Cgpmb3IgaSBpbiAke2xpc3RbQF19O2RvCglkZXRlY3Rpb24gJGkKZG9uZQoKbnZpbSAkZmlsZXMgLWMgInZzcGxpdCIgLWMgImIyIgo==" | base64 -d > vvim && chmod a+x vvim && mv vvim /usr/local/bin