小甲鱼 发表于 2015-10-28 04:44:36

第四节:粘贴命令、替换命令、替换模式和修改命令

第四节:粘贴命令、替换命令、替换模式和修改命令

前方高能:今天会举很多个栗子!




粘贴命令

尽管上节课最后有写重大备注,但我知道肯定有些鱼油还是没看到,就只看到这个:



这里再次强调下:在 VIM 下使用删除命令,并不会直接将你的东西删掉,而是放到 VIM 的寄存器中。这样做有一个好处,就是可以让我们简单的实现类似于 Windows 的剪切功能。

使用 p 命令可以将最后一次删除的内容粘贴到光标之后。(大写的 P 则是粘贴到光标之前)



上边的栗子本来是:
Line One
Line Three
Line Two
Line Four

我只需将光标放在 Line Three 处,然后按下 dd 命令,再按 p 命令,即可将 Line Three 和 Line Two 的顺序调换过来。是不是很方便呢?

这里需要注意的是:如果你需要粘贴的是整行为单位,那么 p 命令将在光标的下一行开始粘贴;如果你拷贝的是非整行的局部字符串,那么 p 命令将在光标后开始粘贴。


拷贝命令

其实我们用的最多的还是拷贝粘贴,VIM 用 y 命令实现拷贝。语法跟删除的 d 命令一样:y motion

其中的 motion 同样是用来表示操作范围的指令,即 yy 表示拷贝当前行,3yy 则表示拷贝 3 行;y$ 表示从光标所在的位置拷贝到行尾的所有字符;yG 则表示从光标所在行拷贝到文件末尾行的所有字符。

拷贝完成之后同样使用 p 命令进行粘贴,没什么好说的。


替换命令

VIM 还提供了一个简单的替换命令:r 命令。

r 用于替换光标所在的字符,做法是先将光标移动到需要替换的字符处,按一下 r 键,然后输入新的字符。注意,全程无需进入插入模式,也不会进入插入模式。

然后你可能猜到了,数字 + r 可能会产生一些物理反应。先输入【数字】再输入 r,最后输入新字符,说明从当前光标的位置开始,替换【数字】个新字符。

再举个栗子:

第一行,先将光标移动到字符 A 处,按下 r 键,再按下 C;
第二行,先将光标移动到第一个字符 B 出,按下 3r 键,再按下 C。




替换模式

对于需要替换多个字符,更好的方案是直接进入替换模式。按下大写的 R 键,屏幕左下角出现 -- REPLACE -- 字样,说明你已经处于替换模式。此时输入字符可以连续替换光标及其后边的内容。注意:退格键(Backspace)在替换模式中被解释为如果左边内容被替换过,则恢复到原来的样子;如果没有被替换过,则简单的向左移动。修改完毕后,按下 Esc 回到普通模式。

哎,怕你不懂,还是举个栗子做示范吧




修改命令

修改跟替换是不一样的!
修改跟替换是不一样的!
修改跟替换是不一样的!

重要的事情要说三遍……

修改会进入插入模式,替换不会进入插入模式!
修改会进入插入模式,替换不会进入插入模式!
修改会进入插入模式,替换不会进入插入模式!



修改命令我们使用 c 键来启动,格式是:c motion

没错,motion 依然表示范围,[数字]依然拥有奥义,同样是可选的,加上数字表示重复执行多次 motion 范围……

比如 cw 是修改光标指定单词的内容(VIM 的做法就是删除当前光标位置到下个单词前的所有字符,并进入插入模式);而 c2w 便是修改当前光标指定的单词以及下一个单词共计两个单词的内容……


按键 含义
c0 删除光标从当前位置(不包含)到该行行首的所有字符,并进入插入模式
c^ 同上
c$ 删除从光标当前位置(包含)到该行行尾的所有字符,并进入插入模式
cb 删除从光标当前位置(不包含)到单词起始处的所有字符,并进入插入模式
ce 删除从光标当前位置(包含)到单词结尾处的所有字符,并进入插入模式
cw 删除从光标当前位置(包含)到下个单词起始处的所有字符,并进入插入模式
ch 删除光标前边一个字符,并进入插入模式
cl 删除光标指定的字符,并进入插入模式
cj 删除光标所在行以及下一行的所有字符,并在光标下一行进入插入模式
ck 删除光标所在行以及上一行的所有字符,并在光标下一行进入插入模式
cc 删除光标所在行的字符,并进入插入模式


所以,事实上,修改 == 删除 + 进入插入模式

好吧,我发现我发现了一个惊人的事实!



嘿嘿,也不完全是这样的哦,因为两者在定位光标上是不完全一样的!但你完全可以认为它们是想通的,因为在实际操作上,并不会影响影响影响你的……



关于魔鬼训练小程序的众多问题,请移步:VIM魔鬼训练须知

zerco 发表于 2015-10-28 08:48:26

学习了

生煎小甲鱼 发表于 2015-10-29 11:10:29

学习了。。。VIM高大上啊

tigermali 发表于 2015-11-29 20:38:56

光看不练 一看就忘唉

zealstar 发表于 2017-1-19 04:33:28

感觉就是在丢鼠标的节奏……

估计玩久了linux回来,鼠标都不会用了吧…………{:10_245:}

baibaitjy 发表于 2017-8-1 22:00:28

替换命令举例子,第二行B和C写反了,感觉{:10_258:}

baibaitjy 发表于 2017-8-1 22:01:20

baibaitjy 发表于 2017-8-1 22:00
替换命令举例子,第二行B和C写反了,感觉

展示GIF上面那一行

@空鸟 发表于 2018-1-31 23:17:12

我发现了一个小问题。。就是替换中对于退格键的说法,通过测试,退格键只能一定程度上恢复内容,如果手动使光标后移,却发现之前替换的内容不对,这时使用退格键回去,就不能恢复了。。所以,我感觉不应该有,退格键的后半句说法,若没修改过,就只当是普通的左移,因为这么一说,就感觉退格键如果在这种没修改的内容存在的情况下,没修改之前的内容也因为没修改的这部分内容的存在,不能通过退格键被恢复。。。好像,,,有点绕了。。。

bencao 发表于 2018-4-21 07:04:22

{:10_254:}

20400992 发表于 2018-5-17 14:32:40

多练,多练,多练

freeck2013 发表于 2019-1-19 15:29:24

小程序找不到啊

Cardist 发表于 2020-7-5 11:00:07

本节课附带练习小程序:<……即将推出……>{:10_277:}

我很cai的 发表于 2020-10-1 20:38:27

1

guhusf 发表于 2021-1-14 20:58:01

Cardist 发表于 2020-7-5 11:00
本节课附带练习小程序:

2021年了,还是没有
{:10_285:}

ShllowDream 发表于 2021-2-22 19:23:09

guhusf 发表于 2021-1-14 20:58
2021年了,还是没有

哈哈

guoxiaopeng 发表于 2021-6-18 20:01:12

说好的附带小练习呢

ochenxingo 发表于 2021-9-30 14:30:29

苦等小练习 {:10_250:}

Mocca 发表于 2021-11-12 01:15:59

跟。。{:5_92:}

sinsis 发表于 2022-7-9 00:10:27

难上加难

阿当2109 发表于 2022-9-1 09:21:52

怎么才能记住{:5_100:}
页: [1] 2
查看完整版本: 第四节:粘贴命令、替换命令、替换模式和修改命令