vim再学习
Vim的设计理念
不同的模式
必须深刻理解不同的模式这个设计
事实上只有三种模式:
- 普通模式
- 编辑模式
- 视图模式
在普通模式下,我们能够进行最高效的操作,因为这个模式提供了大量的命令
所谓的命令模式不过是普通模式下的一种以:开始的命令
普通模式的使命
普通模式是常用模式,是命令模式,是最强大的模式
在这个模式下,可以使用大量的命令来辅助我们进行修改
- 光标的移动
- 选中区域
- 执行删除,复制,粘贴,撤销,恢复…
可视模式v模式的使命
在普通模式的命令中,必须是操作命令在前,街上选中命令
但是这有一个问题,往往我们无法快速,明显的知道我们到底选中了什么内容,很多时候我们会搞错命令的最终效果
所以可视模式的目的就是让我们将选中放在前,我们可以明显的观察到选中的部分,然后再执行操作
所以v模式的执行逻辑是
- 先在普通模式,通过移动命令定位到要操作的内容前边
- 按下v进入v模式,此时所有的移动命令的作用都是和最开的位置形成选中效果
- 确认是自己要的选择部分,,就可以按下操作命令,,操作命令结束后自动进入普通模式
操作+选择的概念
vim最强大,也是最困难的就是普通模式的命令了,这些命令都是为了操作+选择的理念而设计的
简单命令分为操作命令和选择命令两种
选择命令
包括直接选择命令和移动选择命令,移动选择命令实际上更为常见,其选择的就是从当前光标到移动后光标中间的所有文本
常用移动系列
- f,t系列 ;,
- w,b,e,ge系列
- hjkl系列
- 0,^,$系列
- % 移动到下一个反括号
- gg开头 G结尾
- 数字 enter表示向下移动多少行
常用选中系列
- iw / aw 系列 选中当前所在的单词
- ib / ab 系列 b表示的是小括号,可以换成B表示大括号,也可以直接使用对应的括号符号表示
- ie / aw 系列 表示整个文件
- it / at 系列 t表示标签,在前端html,xml的编写特别方便
操作命令
删除d命令
修改c命令
复制y命令
粘贴p命令
恢复u命令
撤销恢复ctrl+r
重复修改命令.
改变大小写gu 或者 gU
vim中的复制和外界的复制
用过vim就知道,在vim中复制的内容不能在外界通过ctrl+v粘贴出来,而外界ctrl+c复制的内容,在vim也无法粘贴出来
实际上这是因为两种复制保存在两块不同的内存文件中,所以实际上是平行的
具体内容看这篇文章
https://liushiming.cn/article/copy-and-paste-in-vim.html
https://www.cnblogs.com/huahuayu/p/12235242.html
vim复制到系统剪贴板
"*y
"+y
"+2yy
– 复制两行{Visual}"+y
- copy the selected text into the system clipboard"+y{motion}
- copy the text specified by {motion} into the system clipboard:[range]yank +
- copy the text specified by[range]
into the system clipboard
vim剪切到系统剪贴板
"+dd
– 剪切一行
从系统剪贴板粘贴到vim
"*p
"+p
Shift+Insert
:put +
- Ex command puts contents of system clipboard on a new line<C-r>
+ - From insert mode (or commandline mode)
"+p
比 Ctrl-v 命令更好,它可以更快更可靠地处理大块文本的粘贴,也能够避免粘贴大量文本时,发生每行行首的自动缩进累积,因为Ctrl-v
是通过系统缓存的stream处理,一行一行地处理粘贴的文本。
独立命令
独立命令要么是基本命令,也就类似于 aio 或者移动命令之类的可以单独使用的命令,有的也可以组合使用
要么就是自身同时具备操作和选择两方面的复杂命令
- r 替换字符命令
- ~ 改变大小写
- g~~ 改变当前行的大小写
复杂命令
实际上复杂命令就是单独一个命令就具备了操作和选择两个方面的命令,所以可以单独使用,但不可以组合使用
例如
- A 实际上等于 $a
- I 实际上等于 ^I
- O 实际上等于 ko
这些命令不能再拼接成操作+选择命令了
:操作命令
在普通模式下还有一种命令以:开始
这些命令是具显著影响的命令,或者组成复杂的命令(往往有多个位置输入表示)
在输入这些命令的时候可以看到明显的提示框提示我们输入的命令
- :w :q 等文件操作命令
- :s/被替换字符串/替换字符串/g
- :q! :wq
- 执行外部命令
- :数字 跳转到几行
- : 行,行号d 表示从哪一行删除到哪一行
操作行概念
我们对一整行的操作比较常用,所以vim提供了操作行的快捷方式
例如
重复字母表示操作行 像 dd cc yy gUU guu g~~
shift或者说大写字母表示操作行AOI这些
g命令快捷键
一些快捷键并不是那么的好用,而使用vim因为其具有的模式概念,可以将快捷键用vim中的更加方便的组合键代替
这些命令很多都有一个特点就是g开头,g实际上意思是go
gh
vim操作练习
复制本行文本
将所有的test替换为workspace
删除括号中的所有文本
定位到第50行
在本行行首插入
重复上次的修改操作
在本行中查到定位到下一个foo单词
在本行中定位到下一个单词foo的前面
继续向下定位本行中的foo单词
定位到上一个单词的行首,或者行尾
在文件范围内查找”””
删除本行到下一个查找到的”””中的所有文本
在本行上面插入一行
更改选中部分的大小写