原文
先进行一个说明,因为vim的组合快捷键特别多,我们这里先进行一个说明 Ctrl键使用^ 代替
^v 表示,先按Ctrl键,再按v键
^V 表示,先按Ctrl键,再按shift 接着按v 键that all。
关于最简单的hikl上下左右的我就说一点,以前我喜欢用hl左右移动但是现在我才发展这种
移动简直就是在浪费生命。
0 移动到改行的行首,$ 移动到行尾 ^移动到行首的第一个非空字符
1. 行内移动命令
最简单的左右移动方法就是使用 f(普通模式下)查找命令该命令
是一个针对行查找的命令,使用f 向后查找,大写F向前查找,f后面紧跟要查找的内容就好了了.
我们都知道/?搜索命令使用n N 显示上/下一个,f F 使用 “;” 和”,”到下一个or 上一个。
上一节我们说了移动这下说一下啊攻击哈,攻击无非就是增删改查我们就说下这个,以前我老觉得rS
没什么用,用的特别少,其实还是很有用的只是当时年轻。
i a I A 我就不多说了,不知道的可以看看基础篇。
p P 也都一样,下面讲到用寄存器的可以看看比较有用。
dd x 大家都会主要说一下dmovie D
d+moive 可以删除movie到的地方非常方便 such as:
dw 向后删除一个单词包含该单词后面的空格,因为w是移动光标到下一个单词的开头,不删除光标下的字符
dW 向后删除一个单词(包含特殊字符such as "he,;llo" 就是一个W )
de db dB d0 d^ d$ 都可以尝试一下逗比较有用哈。当然了组合有很多,你可以自己研究一下
dgg dG 组合有很多有,不过是大范围的还有魔法命令都在下面等着你哦。
r (eplace ) 用你输入的字符替换光标下面的一个字符 ra 替换字符为a
R 一直替换光标下面的字符,直到退出该模式
c+movie == change movie ,和上面的dmovie 是一样的组合命令就是用来删除movie选择的,然后进入
插入模式你就可以输入了。such as : cw cW cb cB ce c0 c^ c$
C 清空整行然后进入插入模式
s 删除当前字符并且进入插入模式
S 清空整行然后进入插入模式
应该都在普通模式模式下面使用过visual,这真是一个有用的模式相应你会爱上它的。
visual总共有三种模式,
1. v+movie 选择movie到的地方可以使用 搜索模式
2. V ( visual line) 激活面向行的可视模式,每次选择一行可以使用jk ,搜索模式也可以使用
3. ^v 激活面向块的可视模式,你可以选择你需要的块,进行类似于表格的操作,当然了在行尾添加or在
行首添加,or 在每一行的同一列进行操作,都可以。通过可视模式你可以做到你想做的大部分处理。
4. gv 重选上次的高亮选区,有用的命令
键入v 进入visual 模式,然后使用 vw ve vW ve v0 v$都可以,当然了这个是行的选择我们下面
主要看看进行大范围的选择,
va{ 会选择包括大括号内的所有内容 a arround }
vi{ 会选择不包括大括号内的所有内容。i inside }
vi( va( 当然了还有一些其他的命令可以选择,当你使用可视模式选择区域之后,就可以进行你想要的
action ,跟上面的一样 增删改查都可以使用,只要先选择目标区域然后,d y c s r ,你可以做你想
做的。当然了如果你没有忘记前面提到的的 [dycrs]+movie 的话,你可以使用 [dycrs]+v+movie和
v+movie+action 其实还是有一些区别的,你可以尝试一下哈。
vgg vG 可以帮助你选择全文哈哈。
在普通模式下面,使用 V 激活visual line 模式之后,就可以使用 jk 上下移动选择行了每移动
j 就是向下选择一行,选择之后你可以发挥你的想象力。我提醒你不要忘记,vim 在命令前面加数字的
牛逼方式哈。
<^v> 在普通模式下面激活面向块的可视模式,在这里你可以使用 jk 移动选择高度,然后再横向移动movie
选择宽度,选择之后,你可以使用 A I 到选择块的所有行首和行尾,当然了 d c y p s 增删改查都可以
总之这是一个高度自由的世界,你想到的都可以用自己方式实现,如果实现不了,你需要再看看手册RTFM哈哈。
顺便说一下,可以使用缩进,> < ,可能你会遇到需要多次缩进,并且每次还需要重新选择,这个时候gv命令就是
非常有用的,可以重选上次选中的区域。
在vim 里面,寄存器无处不在,/ ? d p 等只要涉及到要暂时保存字符的行为都会使用到寄存器,比如寄存去/就是
一个特殊的寄存器,存储我们上一次使用的搜索模式。vim 为我们提供了26个英文字母的寄存器,使用寄存器需要在
寄存器前面加上 ” such as ,“a 表示使用寄存器a; ”b使用寄存器b。
y d 会把删除的字符存储到"“"寄存器;同时还存在一
个复制专用寄存器:0 ,也就是说在复制的时候,会有俩个寄存器存储你复制的字符 ” “, 0 ” ;
当然了你也可以使用26个字母的寄存器 。 “ayy ,复制当前行到寄存器a。使用寄存器内容俩个方式:
在普通模式下面使用: ”ap;
在插入模式下面:<^r>a ; <^r>+寄存器名字
有的时候需要计算一下数值,又不想退出vim同时把结果插入到vim ,这个时候表达式寄存器 = 就会特别有用
在插入模式下面,<^r>= ,然后会在vim左下角显示一个等号,然后输入表达式最后 按Enter 键,结果就会插入
到当前的位置,是不是很方便。
“% 存储当前文件名
”# 轮换文件名
“. 上次插入的文本
”:上次执行的Ex命令
“/ 上次查找的模式
”+ 系统寄存器,使用该寄存器你可以把vim的内容粘贴到系统粘贴板,反之亦然。
“* 主剪贴板,用鼠标中键选择的内容
所谓的魔法就是你可以站在原地施法,然后达到上面需要移动才能完成的任务,不管是远程的还是近身的都可以通过
通过所谓的命令行来实现,vim的命令行其实是叫做Ex(Excutive),它是由历史演化而来的,我们都知道vim是vi的延伸
那你知道ed是vi的前身吗,ed前面还有ec eb等编辑器,因为以前的最原始的计算机是使用打孔机的,所以看代码都是
打印出来,对代码也是进行行的处理,后来出现了显示屏幕,然后vi就出现了但是它保留了以前编辑器对于行的处理
也就是ex命令,vim 其实是vi的备用编辑器,但是经过多年的发展,vim变得比vi更复杂更好用,但是更难学,因为
快捷键or命令又增加了很多,所以建议学习vim的可以先学习vi,然后再学习vim因为vim向后兼容vi的所有功能,emacs我
用过一段时间但是因为我实在是太笨了,到最后也不会配置所以就放弃了,接着用vim了,但是我想将来可能还会去使用
一下,毕竟我们都拥有一颗奋斗不止的心是吧。
在普通模式下面 键入 / 就会激活向下查找模式 键入?激活向上查找模式,n N 上下一个
写个例子
who am i
you are a smart person
Who
Whoami
大小写
\c 忽略大小写放在/的后面
\C 区分大小写放在搜索模式的后面
/\cwho 匹配who Who Whoami
/who\C 匹配 who
/Who\C 匹配 Who Whoami
正则表达式\v
因为linux里面 | 是管道 < >是重定向还有”{ ” () 等都是有原意的字符,我们在正则表达式使用这些字符的时候必须
使用它们在正则表达式中的特殊含义。| 是或的意思是,{}表示此时,()表示匹配子项 <> 表示单词匹配等等,我们必须
在使用它们的前面加上\才能使用它们,如果我们的正则表达式很短则无所谓,但是通常情况下我们的表达式很长,因为
短的根本就不需要正则,so我们需要/v来开启字符的特殊含义。
\v 会激活very magic搜索模式,即假定除_、大小写字母以及0-9之外的所有字符都具有特殊含义。
上一步我们找到了我们想要找的文本,这一步我们就可以尝试去修改他们让它们变成我们想要的文本就是所谓的替换了。
:[range]s/pattern/string/gc #总得替换就是这样得了
range 默认当前行,1,12 表示1到12行,%表示全文, . 表示当前行
pattern就是模式我们上一步,如果为空则会使用上一次搜索使用的模式,so 一般是先搜索然后在替换的时候留空就好了。
是不是很棒啊,这个都是通过寄存器实现的哈。
string 就是我们要替换的字符串了,
g 表示的是global ,替换所有
c confirm 每次替换前会询问一下
使用上一条命令or历史命令,使用: 然后按上下键,就可以查看和使用以前的命令,搜索也是的。原理其实是显示寄存器中的内容。
:[range]d
range 同上面的一样
d 就是删除了哈
:%d 删除全文哈哈,可以试试。
想不想使用玄幻小说中的传送阵啊,mm (make m sign) 做一个标记,回到这个标记使用 `m 就可以了 我们可以使用的有26个小写和
大写字母,小写是局部标记的,离开该文本失效,大写的是全局的,离开该文本照样生效,是不是很fasion啊。
:let i=1 /* 声明变量i */
qa /* 开始 */
<^r>=i /* 使用表达式寄存器 插入变量的值 */
:let i +=1 /* 变量加1 */
q /*结束*/
vim 可以打开一个文件or 多个文件,可以在打开一个文件之后再读取多个文件进来
vim 会维护一个文件列表,一般叫做缓冲区列表,因为我们的文件会被加载到缓冲区。
args 中 *符号用于匹配0个或多个字符,但它的范围仅限于指定的目录而不会递归其他
子目录;**通配符也匹配0个或多个字符,但它可以递归进入指定目录的子目录
:args */.txt 会遍历当前目录下面的所有子目录的txt文件
:args .txt / 加载当前目录下面的 所有txt 文件不包含子目录。 可以使用:cd 切换目录 */
:args cat dir.txt
会把cat读取的内容作为输入,假如dir.txt 里面存储的是一个项目的文件
:argdo {cmd} 会对缓冲区列表文件都执行一条cmd命令
则使用这个命令就可以把该项目加载到vim。
:args 会列出来所有的文件,通过一行,当前文件会被[]标记起来。
:n(next) :prev :first :last 下 上 第一个 最后一个
:edit filename 读取文件到缓冲区
:ls 会以行的方式显示缓冲区中的文件列表,易读 %标记当前文件 #标记上一次编辑的文件
<^^>即
:r filename 可以把文件的内容读入到当前的编辑的缓冲区
:r! {cmd} 运行命令,并且把结果插入到缓冲区
:w !sudo tee % 当你修改完一个文件却发现需要root 权限的时候使用这条命令
:wa[ll] 保存缓冲区所有的文件
:w[rite] 把缓冲区写入磁盘
:qa[ll] 关闭所有的窗口,放弃修改
:e[dit]! 把磁盘文件读入缓冲区即回滚所作操作
如果我们已经修改了一个缓冲区,然后想要next到下一个缓冲区的话,你就需要保存
已经修改的缓冲区,不然next会报错的,但是启动hidden选择之后,就可以不用考虑
这个问题,在最后使用 :wall 就可以了。
:set hidden ,设置hidden选项
:set nohidden ,设置hidden选项
:set hidden? ,查看hidden选项