vim简介
vim是一款功能强大的文本编辑器,也是早年vi编辑器的加强版,它的最大特色就是使用命令进行编辑,完全脱离了鼠标的操作,因工作及生活用电脑都习惯Linux系统很久了,对于vim很多命令有时还是容易忘记,所以今天进行的汇总和记录
高效的vim命令功能图所示:
vim 工作模式
- 命令模式
- 编辑模式
- 末行模式
注意点:编辑模式和末行模式之间不能直接进行切换,都需要经过命令模式来完成
命令模式指令
- 常用命令
命令 | 描述 |
---|---|
u | 撤销回退操作 |
Ctrl+r | 反撤销 |
yy | 复制 |
p | 粘贴 |
v | 可视化单个字符选中操作 |
V | 可视化按行选中操作 |
:/搜索的内容 | 搜索指定内容 |
G | 回到末行 |
gg | 回到第一行 |
- 扩展命令
命令 | 描述 |
---|---|
数字+yy | 复制当前行之后的多行 |
数字+dd | 剪切当前行之后的多行 |
>> | 往右缩进 |
<< | 往左缩进 |
:%s/要替换的内容/替换后的内容/g | 全局替换 |
:开始行数,结束行数s/要替换的内容/替换后的内容 | 局部替换 |
. | 重复上一次命令操作 |
shift+6、I | 回到当前行的行首 |
shift+4、A | 回到当前行的行末 |
ctrl+f | 下一屏 |
ctrl+b | 上一屏 |
末行模式指令
命令 | 描述 |
---|---|
:%s/要替换的内容/替换后的内容/g | 全局替换 |
:开始行数,结束行数s/要替换的内容/替换后的内容 | 局部替换 |
vim寄存器
vim寄存器和系统剪贴板不是一个东西,顾名思义,vim寄存器的数据作用域仅限于vim本地,甚至如果开多个vim窗口,每个窗口都有一套自己完整的寄存器,互相不影响。而系统剪贴板作为系统级别的全局变量,默认是不能混用的。
使用如下命令查看寄存器
:reg [register_name] 查看所有寄存器
:reg [register_name] 查看指定寄存器
-
" 寄存器
未命名的寄存器,是 Vim的默认寄存器,例如删除、复制等操作的内容都会被保存到这里。 -
0-9寄存器
表示数字寄存器,是 Vim 用来保存最近复制、删除等操作的内容,其中 0 号寄存器保存的是最近一次的操作内容。 -
a-zA-Z寄存器
表示用户寄存器,Vim 不会读写这部分寄存器 -
寄存器
剪切板寄存器,关联系统剪切板,保存在这个寄存器中的内容可以被系统其他程序访问,也可以通过这个寄存器访问其他程序保存到剪切板中的内容。
打通+寄存器和系统剪贴板的映射
vim专门提供了"+寄存器作为对系统剪贴板的映射,可以理解成自动把"+寄存器的内容再复制一份到系统剪贴板,前提是你得把clipboard属性设置成打开,打开以后用"+y命令把内容复制到和系统剪贴板关联的寄存器"+上。而y只是复制到默认无名寄存器""上。
- 判断Vim是否支持系统剪贴板
hushow@hushow:~$ vim --version | grep clipboard
-clipboard +jumplist +persistent_undo +vartabs
+eval +mouse_gpm +syntax -xterm_clipboard
如果结果里找到+clipboard,恭喜你当前Vim支持系统剪贴板,如果开头的是-clipboard,说明你的vim不支持系统剪切板,需要先重新安装vim操作,如下:
linux:
sudo apt install vim-gtk
MacOS:
brew install vim
效果:
hushow@hushow:~$ vim --version | grep clipboard
+clipboard +jumplist +persistent_undo +vartabs
+eval +mouse_gpm +syntax +xterm_clipboard
+寄存器和系统剪贴板实例
注:命令行模式下执行以下命令
-
复制当前行到系统剪贴板
"+yy
-
将系统剪贴板内容粘贴到当前位置
"+p
命令说明:
命令 | 描述 |
---|---|
"nyw | 复制当前单词到 n 号剪切板(双引号开始) |
"np | 粘贴 n 号剪切板内容到当前位置后 |
"+Y | 复制当前行到系统剪切板 |
"+nY | 复制当前行往下 n 行到系统剪切板 |
"+p | 粘贴系统剪切板内容到当前位置后 |
修改默认寄存器为为+寄存器
如果想偷懒用y直接把内容复制到系统剪贴板,需要到vim配置文件.vimrc里加一行属性。用下面命令开始配置,
vim ~/.vimrc
set clipboard=unnamed
现在你的y,d,x,p已经能和 ctrl-c和ctrl-v 一个效果,并且能互相混用。
很好