有些工具,当时拿出来的时候很惊艳,但是一段时间过后就会明白充其量也只是惊艳而已。
还有一种工具,当你使用的越多,你才会发现这玩意简直就是神一样的存在。
vim就是这样的工具,你服还是不服?
教程很多,我个人之前存放的是简明vim练级攻略
文本操作历来就是常见操作,这种技能不能挂上技能清单,但是如果你没有处理文字的能力,那么总会让人觉得有些不可思议。从search
到regex
,从notepad
到notepad++
,最后再到这里要讨论的vim
,你会发现,有些东西,确实是熟能生巧之后才知牛逼。
vim用的时间不长,已经发现了确实非常赞,个人感觉vim的最大好处是释放了你键盘和鼠标切换的时间,这个时间真的太长了,而且是没有意义的存在。
文本操作有时候和数据库的操作非常像:增,删,改,查。
常见基础命令
阅读
- 普通模式下光标移动
h(left-line),j(down-line),k(up-line),l(right-line)
- 跳转到第n行
nG
- 跳转到文本起始位置
gg
- 跳转到文本末尾
G
命令模式的开启:: / ?
编辑
插入
a
(after) 在光标后插入A
在光标所在行的末尾插入i
(before) 在光标前插入I
在光标所在行的起始位置插入o
在光标所在行下方新建行插入O
在光标所在行的上方位置新建行并插入r
替换光标位置处的字符(only one time),执行后返回到普通模式R
在光标位置处连续替换,直到ESC
被按下为止
替换
范围 s/old-chars/new-chars
(update 6.30) 这几天在处理bash文件
的时候经常要将连续几行文字给注释了。也就是在若干行的句首添加#
字符。
方法如下:
:.,$s/^/# (将当前行到文件末尾的所有行句首添加#)
:1,3s/^/# (档案的第1~3行添加注释#)
估计
^
是行开头的标志,看得出来这种方法也是替换的一种应用方式。
(udpate7.1)
既然讲到了句首,那么也说说句尾。
和
^
代表句首一样,$
代表的是句尾。
1 #linux
2 #linux
3 #Redhat
4 #Redhat
~
~
~
~
:%s/$/ --this is line end symbol
替换后就成了
1 #linux --this is line end symbol
2 #linux --this is line end symbol
3 #Redhat --this is line end symbol
4 #Redhat --this is line end symbol
其中%s/
代表了文件中的每一行,和1,$s/
是一个意思
update(7.2)
要用到注释光标下4行的内容,可以使用
:.,+4s/^/#/g
,注释后光标下移4行。向上用-range
符号:start-line,endline s/old-words/new-words/g
中old-words
是正则匹配pattern
,今天才知道。因此替换功能更加强大了。
同时,也测试了一下是否/
查找命令也支持正则,结果是不支持。。
删除
- 删除光标所在行
dd
- 删除光标后n行
ndd
- 向后删除光标所在的单个字符
x
,向前删除光标所在的单个字符X
复制:行复制yy
粘贴:p or P
(取决于粘贴方向)
剪切:dd
(delete,行操作)
undo: 撤销 u
redo:恢复 ctrl+r
(为什么不是r,因为r已经是开启编辑模式的功能键了)
查找
查找:/searchWord
向下查询,向上为?searchWord
继续寻找为:n
(sublime 下的F3
)
保存那些太常规了,基本上不会变化,没必要细讲。
update 7.2
- 查找光标所在位置当前词。一个简单的方法可以让你查找下一个和当前词一样的词,你不必输入/currentword,你可以直接按下*就可以查找下一个currentword。#可以让你向上查找同一个单词。
从命令中得到的一般规律,有待考证:
$ 应该和正则一样,是个行后缀标志,作用范围为当前行内
G 应该是个跨度标志 如 10G,即从开头跨越到第10行, yG 表示光标所在行到最后一行全被复制
组合命令
- 删除全文
1.跳转到文件第一个字符 gg
2.删除到文件结尾 dG
小技巧
晚上查文档发现了一些小技巧
切换显示行号开关
:set number
:set nonumber
竟然也可以这么写
原来!
也可以表示关闭的意思
:set number
:set number!
在命令行下同样可以执行bash
快捷键
ctrl+u
删除命令ctrl+p
显示上一条命令
等等等等,原来执行的是bash
操作。