vim编辑器快速命令
记录了vi编辑器的各种常用命令,方便查询使用。
vi的三种工作模式
- 命令行模式
默认进入编辑器的模式,可以进行查看、复制、粘贴、其他快捷键等,如果从其他模式激活命令行模式则按以下Esc。 - 插入模式 对内容继续增删改等操作,按下i激活该模式。
- 底行模式 光标位于底部,以输入命令进行vi操作,命令行下输入冒号(:),即可激活。
简单命令
1. 保存
1 | :w |
2. 退出
1 | :q #没有修改过 |
3. 保存并退出
1 | :wq #二者等效 |
高效的命令
1. 插入命令(从命令行模式进入插入模式)
1 | #小写组 |
2. 运行Linux的原生命令
有时候我们在vi编辑器中,如果想运行linux命令,一般需要多开一个终端或者保存退出当前编辑器再运行,而实际上也支持在vi中运行linux命令,例如查看当前文件路径等,省去了很多麻烦。
1
:!cmd
1
:!pwd #文件中查看当前路径
3. 复制/粘贴/删除/撤销操作命令
1 | 数字yy #从当前行光标开始复制指定数字行(数字默认为1,即当行) |
4. 另存为/读入File文件
1 | w file #保存当前文件为file文件 |
5. 光标命令
1 | :set nu #显示行号 |
6. 查找字符
1 | :/str #查找str字符串 |
7. 替换字符
1 | 基本格式 |
一些利于开发的配置
缩进、自动补全、行高亮等
把vim配置成VsCode那么好用也麻烦,简单配置vim即可,在/usr/share/vim/vimrc配置中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20set nu #显示行数
set tabstop=4 #缩进为4(默认8)
set autoindent #自动缩进
set cindent #自动缩进
set cursorline #当前行高亮
syntax on #关键字高亮,颜色不同
set completeopt=preview,menu #函数等名字自动补全(ctrl+n)
#括号、引号等自动补全
inoremap ( ()
inoremap [ []
inoremap { {}<ESC>i
inoremap " ""<ESC>i
inoremap ' ''<ESC>i
set mouse=a #支持鼠标操作
set et #自动将tab转成空格,对排版友好
set et! #取消tab替换
set shiftwidth=2 #用于排版,自动缩进宽度为2
ctags查看宏定义
在查看头文件时,没法像Vscode等IDE直接跳转,给宏定义查看带来不便,ctags插件能解决这个问题;
1
sudo apt-get install ctags
在头文件位置(不清楚就locate xxx.h)生成标签,生成速度嘎嘎块
1
ctags -R
1
vi -t xxxx(宏定义、变量名、自定义数据类型等)
但注意,ctrl+左键原始是用于块选中,引入ctags后只能使用ctrl+shift+左键来进行块选择(可忽略行号),或者使用shift+左键来整行选择(会复制行号);
注意该命令只能在tags所在目录运行,如果需要全局运行,需要在vimrc(自行确定vim配置文件位置,我的是/usr/share/vim/vimrc)中添加配置
1
set tags=tags的路径
1
2set tags=tags
set autochdir 1
ts + 查找内容
换行续上一行
行末尾空格+\可以直接将下一行续上;
vim与系统粘贴板
虚拟机和Windows、Linux跨终端字符复制都需要用到系统粘贴板,这时候就不是yy和p可以解决的了,首先查看vim是否支持系统粘贴板:
1
vim --version | grep clipboard
1
sudo apt-get install vim-gtk
配合vim命令
假如需要全文复制到别的终端、或者Windows系统,在vim中则使用多一个+号代表是系统粘贴板:
1
:%y+
可视化模式
可视化模式可以进行跨系统的传输,可视化选择字符,ctrl+y可以复制对应字符,在Windows下可以粘贴;(这种方法的跨终端我还没找到)
块选择模式
块选择模式可以避免把行号也一并复制了;ctrl+左键可以进行块选择,如果和ctags冲突就是ctrl+shift+左键选择;这种情况可以使用shift+ctrl+c复制文本,跨终端、跨系统都可以使用shift+ctrl+v粘贴。这个也是最常用的用法;
Vscode SSH与系统粘贴板
其他SSH软件暂时没有试过,如果是VsCode,可以安装Vim插件按照上面的说法操作;
另外一种方法,在Vs终端使用Vim的话:块选择就变成了alt+shift,然后shift+ctrl+c可以进行复制,Windows下粘贴就是ctrl+v,如果复制回Linux就是加多个shift(但估计没人要)。