vim实用命令

时间:2023-01-30 22:16:57


文章: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'
  • 在选中的地方进行替换并且生成序号(重点!!!)
  1. 比如说我操作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
  1. 替换字符串中间的字符为序号
存在如下字符:
"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 会将它们小写

插件

批量单行注释

  1. 光标移到行首
  2. conrol + v会出现视图模式的选中光标
  3. 上下移动选中你要批量编辑的行数
  4. shift + i即可进入输入模式
  5. 输入你想编辑的内容(注释就是输入//)
  6. 最后按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