2009-02-28 240 views
5

我刚才的问题似乎有点暧昧,我会改换:Vim的复制和粘贴

我有一个这样的文件:

copythis abc 
replacethis1 xyz 
qwerty replacethis2 
hasfshd replacethis3 fslfs 
And so on... 

注: replacethis1,replacethis2,replacethis3, ...可以是任何文字

如何用“最少vim命令”替换“replacethis1”,“replacethis2”,“replacethis3”,..“copythis”字。我可以做

一种方式是通过下列步骤操作:

  1. 删除 “replacethis1”, “replacethis2”, “replacethis3”,...利用 'DW'
  2. 复制 “copythis” 使用“YW '
  3. 将光标移动到“replacethis1”所在的位置并做'p';将光标移动到“replacethis2”所在的位置,并执行“p”等等...

有没有更好的方式在VIM中执行此操作(使用较少数量的vim命令)?

回答

6

既然你改变你的问题,我会这样做:

移动到第一个“replacethis1”并键入cw(更改单词),然后手动键入“copythis”。

移动到下一个“replacethis”,点击。 (重复上次操作)

移动到下一个 “replacethis”,打,

等等,等等。

如果“copythis”是一个小词,我认为这是最好的解决方案。

+0

,具体取决于您如何移至不同的待替换单词,最好使用ciw(或caw)而不是cw。为了顺利工作,你需要在更换这个开始。 – user55400 2009-03-02 13:33:21

0

你试过字符串替换吗?

%s/replacethis/copythis 

许多其他参数可用于微调替换。深入了解Vim的帮助以获取更多详细信息。一些更多的例子here

1
:%s/copythis/replacethis/g 

用replacethis替换所有出现的copythis。或者,您可以指定一系列行号,例如:

:8,10 s/copythis/replacethis/g 

注意,/ g最后会告诉它替换所有出现的事件。如果你离开它,它只会做第一个。

+0

请参阅我的更改后的问题 – 2009-02-28 08:08:21

+0

您已将这两个术语颠倒过来。 – 2009-03-02 22:41:56

0

如果u需要基本相同的动作多次做 - 与下一行的第二个字一行交换第一个字,我说你可以录制宏,并调用它,只要你需要

+0

请参阅我的意见问题 – 2009-02-28 08:07:18

1
  1. 创建的映射:

    :映射žcwcopythis^[

    (^ [是转义字符,可以用Ctrl + V CTRL + [在vim键入)

  2. 转到您要替换的每个单词并按z

4

需要将数字包括在内, d是每行一个以上的实例:

:%s/replacethis\d/copythis/g 
3

鉴于“replacethis [1-3]”可以是任意的不相关的话,要做到这一点的最快/最简单的方法全局将是:

:%s/replacethis1\|replacethis2\|replacethis3/copythis/g 

(请注意,您需要使用\ |让管道起到“或”的作用。否则,vim将查找文字| 。字符)

1

我一直在为此而努力了很久也一样,我想我只是制定了清晰的方式:

使用的任何命令是干净的把copythis到寄存器R:

/copythis 
"rye 

然后去更换,并与r的内容替换它:

/replacethis 
cw<CTRL-R>r<ESC> 

那么你可以n.n.n.n.n.n.n.为他们的休息,或者如果他们疯狂迪不同的只是去每个的开头.

关键是更换和粘贴在一个步骤,因此您可以稍后使用.

0

您可以重新映射例如正常模式下的m键删除光标下的单词并粘贴缓冲区::nnoremap m "_diwP。 然后,您可以复制所需的单词,将光标移动到要更换的单词上并键入m

编辑:映射到m是一个坏主意,因为它用于标记位置。但是你可以使用例如无论如何,我们都需要;