Vim 萌新一枚,想问:我默认 register 已经复制了一个单词,hello 。然后我在一段代码中看到有三个位置要替换成 hello 这个单词,且这三个位置是随机的,没办法用 regex 之类的其他替代操作实现。按照一般的逻辑我肯定是跳到第一个单词,例如这个单词是 Are,我可以在 visual 模式下 viw,然后 p,这样就能替换掉第一个单词,但是诡异的是这个操作以后 vim 的 register 会被替换成 Are (不再是 Hello ),这样我去第二个单词粘贴的时候就粘的不是 hello 了,像这种情景需要怎么解决呢?
另外,从系统剪贴板复制除了用"+y 有没有别的更快的方式?谢谢大家。
1
MaxTan 2020-05-28 09:28:20 +08:00 1
如果是 Linux 下用 fcitx 输入法的,可以用 fcitx 自带的剪贴板功能,ctrl+;
|
3
lniwn 2020-05-28 09:34:38 +08:00 1
如果是 Windows10,启用系统的云剪切板之后,使用快捷键 Win + V
|
4
lululau 2020-05-28 09:34:39 +08:00
找找 vim 的 multiple cursor 插件
|
5
tamlok 2020-05-28 09:36:15 +08:00 via Android
nnoremap 映射
|
6
shawnbluce 2020-05-28 09:36:59 +08:00 2
这是 vim 的一个特性,搜索关键词:“vim 寄存器”就明白了。或者看下这个 https://blog.just666.com/2019/01/19/vim-register/
|
7
igaozp 2020-05-28 09:38:47 +08:00
|
8
itskingname 2020-05-28 09:42:35 +08:00
不知道你是在哪个环境的 vim 。我用 macOS 上面的,normal 模式可以直接粘贴系统剪贴板。所以我可以直接:%s/Are/粘贴 /g
|
9
lniwn 2020-05-28 09:48:10 +08:00 1
另外,从系统剪贴板复制除了用"+y 有没有别的更快的方式?
> 两种解决方式,①设置快捷键;②设置共享系统剪切板 " 复制选中区到系统剪切板中 vnoremap <leader>y "+y " 共享系统粘贴板 set clipboard=unnamed |
10
exiaoxing 2020-05-28 10:13:24 +08:00
xnoremap p "_dP
|
11
ZhangGu 2020-05-28 10:15:37 +08:00
我怎么记得有一个:s 的功能呢
|
12
Immortal 2020-05-28 10:18:33 +08:00
寄存器啊- -
你可以用 :reg 命令看下寄存器内容 |
13
Lime 2020-05-28 10:24:31 +08:00
xnoremap p pgvy
|
14
Volekingsg 2020-05-28 10:44:46 +08:00
:%s/word/newword/gc ?
|
15
Volekingsg 2020-05-28 10:45:18 +08:00
|
16
weixiangzhe 2020-05-28 10:51:56 +08:00 1
vim 下有 cgn,貌似大部分编辑器里插件是不支持,真用 vim 的可以试试,
比如这段,替换 xxx 为 yyy ``` xxx dfsdfdsf sdfasdfasdf xxx dfsdfsdfsd xxx sdfsdf ``` 1. 在 xxx 处 normal mode 输入 cgn,xxx 会被删除, 2. 然后输入 yyy 3. 搞定后,normal 输入 n 4, 想要替换为 yyy,normal 下输入 '.' (repeat), 不想替换就输入 n 找一个 |
17
yincrow 2020-05-28 13:12:11 +08:00
用 sed 语法替换
|
18
woncode 2020-05-28 13:26:44 +08:00 via Android 1
因为 viw 相当于你先剪切了 Are,此时寄存器的第一个就变成了 Are,不再是原来的 hello
|
19
zhuisui 2020-05-28 13:33:25 +08:00 1
|
20
blessingsi 2020-05-28 20:33:28 +08:00 1
先#选中词,然后 cw, 输入想要替换的词。之后 n 下一个,.重复操作
|
21
MrUser 2020-05-29 07:52:14 +08:00
|
22
ilunny 2020-05-29 12:33:25 +08:00 1
前一个问题之前也遇到过,看了大家的回复感觉可以通过选择粘贴寄存器历史里的条目解决:
viw "0p |