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