学习网站
在linux上学
输入 vimtutor zh
还可以在这些地方学
陈浩简明 VIM 练级攻略
vim教程网
高效编程:在IntelliJ IDEA中使用VIM
frankfuckppt b站自搜(淘宝付费教程)
我在这学的,感觉还阔以,讲虚拟机的使用、linux和vim
visual(可视化模式)
选中
- v:可以自由选中任意文本
可以按o改变光标在选中文本的位置,且已选中的文本不会失去选中状态
-
V:只能选中行
-
ctrl+v:很神奇的一种选中方式
-
vaw:快速选中一个单词
-
vab:快速选中括号及括号内的单词
- vaB:快速选中包含大括号的一段代码块
-
缩进
选中代码后
- <:往左缩进
- >:往右缩进
- =:自动给代码完成缩进
转大小写
- ~:翻转选中文本的大小写
- u:全变小写
- U:全变大写
normal模式(打了个:就进入命令模式啦)
normal模式千万别使用<----(退格符),和 delete
,插入模式可以考虑使用
INSERT,进入插入模式
- a:在一行后添加
- i:在光标前添加
d|num|motion
- (数字)x:删除几个字符
d代表删除操作符
-
d(数字)w:删除直到下一个单词首字母
中间的所有空格都会被删除,也就是说,可以用来直接删除所有空格,直到下一个单词首字母
-
d$:删除光标所在位置及后面的全部字符
-
de:只会删除当前单词,而不会删除空格
-
(数字)dd:删除整行
跳转
单行内
-
(数字)b:往前跳,跳到单词首字母。
-
(数字)w:往后跳,跳到单词首字母。
-
(数字)e:跳到单词末尾,可指定跳到第几个单词末尾。
末尾只能是单词尾字母,如果已经在单词尾字母处,则会跳到下一个单词尾字母。
-
^:跳跃到本行开头(首字符所在位置)
-
0:跳到行首(包含了空白符)
-
$:跳到行尾
如果你认为单词是由 blank 字符分隔符,那么你需要使用大写的 E 和 W 。(陈皓注:程序语句)
多行
- (数字)G:到第N行
- gg:到第一行
- G:到最后一行
- :(数字):直接打数字相当于到达当前行号加上这个数字后的行数,而不是准确的一行
匹配移动
%
: 匹配括号移动,包括(
,{
,[
. (陈皓注:你需要把光标先移到括号上)*
和#
: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
真就是匹配单词,不是我想的字符
段落移动
其实就相当于移动到完全空白的一行
- {:向上移动一段
- }:向下移动一段
撤销
undo
- u:撤销上一个操作
- U:撤销对本行的修改
- ctrl+R:撤销撤销
修改
输入 r 修改当前字符
- ce:de+i,也就是说删除当前光标后面的字符,并进入插入模式,不同的是,插入模式只能往前插入,而这个能在光标所在位置插入
- c$:删除光标所在位置及后面的所有字符,并进入插入模式
剪切和粘贴
- (数字)p:粘贴
- yy:复制
所有的删除都相当于是剪切,因为 vim 有个寄存器能储存被删除的内容。
重复执行上次命令
它不会记录 hjkl,等移动光标的操作,但会记录 i,o,a操作
- (数字).
比复制粘贴少几步操作,相当于提前复制了,而且根据 i,o,a 还能指定往前面复制还是往后复制或是往下复制
查找和替换
- /(内容):查找指定的内容
- : s/(内容)/(替换的内容)/g:加/g(全局),代表替换当前行的所有内容
csdn直接输入 😒 会变成表情 ‘:’ 后面没有空格
不加/g只会替换一个单词
- %s/(内容)/(替换的内容)/gc:替换整个文件的内容,加 c 后你需要输入 y 确定是否替换,如果不加 c 那就直接替换了。
:set number可以临时显示行号
- :9,15s/(内容)/(替换的内容)/g:替换 9 到 15 行的所有内容
翻页
翻一大段
- ctrl+f:向下翻页
- ctrl+b:向上翻页
滚动翻页,只会翻一点点
- ctrl+e:向下翻页
- ctrl+y:向上翻页
vim基本配置
简单配置,真正的高手不需要。。。
vim .vimrc
# 高亮
set syntax=on
# 缩进
set tabstop=4
set softtabstop=4
# 语言
set enc=utf-8
# 光标遇到圆括号、方括号、大括号时,自动高亮对应的另一个括号
set showmatch
高端配置,真正的高手需要。。。
暂时举两个,欢迎大家补充。
进阶!理解Vim
这部分来源 一起来说 Vim 语,理解此部分是需要你已经了解了 Vim 的几种常用的工作模式(正常模式、插入模式、命令模式等)
动词理解
==动词代表了我们打算对文本进行什么样的操作。==例如:
d # 表示删除delete
r # 表示替换replace
c # 表示修改change
y # 表示复制yank
v # 表示选取visual select
名词理解
名词代表了我们即将处理的文本。
Vim 中有一个专门的术语叫做 [文本对象] text object,下面是一些文本对象的示例:
w # 表示一个单词 word
s # 表示一个句子 sentence
p # 表示一个段落 paragraph
t # 表示一个 HTML 标签tag
引号或者各种括号所包含的文本称作一个文本块。
介词理解
介词界定了待编辑文本的范围或者位置。
i # 表示在...之内 inside
a # 表示环绕... around
t # 表示到...位置前 to
f # 表示到...位置上 forward
数词理解
数词指定了待编辑文本对象的数量,从这个角度而言,数词也可以看作是一种介词。
引入数词之后,文本编辑命令的语法就升级成了下面这样:
c3w # 修改三个单词:change three words
d2w # 删除两个单词:delete two words
另外,数词也可以修饰动词,表示将操作执行 n 次。
于是,我们又有了下面的语法:数词 动词 名词
2dw # 两次删除单词(等价于删除两个单词): twice delete word
3x # 三次删除字符(等价于删除三个字符):three times delete character
组词为句理解
有了这些基本的语言元素,我们就可以着手构造一些简单的命令了。
文本编辑命令的基本语法如下:
下面是一些例子(如果熟悉了上面的概念,你将会看到这些例子非常容易理解),请亲自在 Vim 中试验一番。
dip # 删除一个段落: delete inside paragraph
vis # 选取一个句子: visual select inside sentence
ciw # 修改一个单词: change inside word
caw # 修改一个单词: change around word
dtx # 删除文本直到字符“x”(不包括字符“x”): delete to x
dfx # 删除文本直到字符“x”(包括字符“x”): delete forward x
diw # 不管位于单词什么位置都能删掉一个单词,但 dw 只能删掉以当前字符为起点的单词
博主注
介词的i 和 a 好像没什么区别啊
# 感觉还是 dt 和 df 、 ct 和 cf 最实用
dt; # 可以直接删到‘;’了,再也不用考虑 2dw 还是 3dw 了
ct; # 可以直接改到‘;’了
dt. # 可以直接删到'.'了
ct. # 可以直接改到'.'了
dt) # 可以直接删到')'了
ct) # 可以直接改到')'了
什么才叫编译器之神啊,战术后仰