Vim:用另一个之前的replace线
每天至less有一次我有以下情况:
A: This line should also replace line X ... X: This is line should be replaced 我相信我不会有效地执行这个任务。
我做的事:
- 去A线: AG
- Yank线A: YY
- 转到X: XG
- 粘贴行A: P
- 移到老线: j
- 删除旧行: dd
这还有另一个缺点,就是X行现在在默认的寄存器中,如果我find另外一行应该被replace为A,那么这很麻烦。Yanking和附加寄存器( “ayy , ”aP )的粘贴使得这个简单的任务变得简单效率较低。
我的问题:
- 我错过了一个内置的Vim命令来replace之前被抽出的一行吗?
- 如果没有,我怎样才能绑定我自己的命令离开(或恢复)在默认寄存器中被抽出的行?
我会做什么:
-  aG
-  Y
-  xG
-  Vp
 你不必离开正常的模式,但它不会放弃线路。 然而,你可以使用V"0p ,它将总是把第2步中的行抽出。 
  Vp :select行,粘贴被抽出的东西 
这有另外的缺点,现在行X是在默认的注册,这是讨厌的,如果我find另一行应该被replaceA.
 要删除文本而不影响正常的寄存器,可以使用黑洞寄存器"_ : 
 "_dd 
我会使用命令行(Ex)模式并执行以下两个命令
 :XmA :Ad 
这只是简单地将X线移动到A之下,然后删除A就移动了
例如
 :7m3 :3d 
- YY
- j(移动到要replace的行),然后
- Vp(大写v,然后p,将replace为被抽出的内容)
- 
移到第一行的开头。 
- 
y , $ – 复制最后没有换行符的行 
- 
移到目标行的开始处。 
- 
- 
V , p – 只replace一个目标行 
- 
c , c , Ctrl r , 0 , Esc – 用原来的yankreplace目标行 
 
- 
- 
移到下一个目标行的开始处。 
- 
。 – 重复4.2发出的命令。 
笔记:
- 
4.1是y , $,因为如果您执行y , y或Y,您将复制换行符,而Ctrl r , 0实际上会将换行符添加到目标行的下方。 
- 
4.2代替V p ,因为从技术上来说最后一个操作是删除,所以不能重复使用。 只会删除一行。 
- 
如果有人知道如何从EX模式(命令行)发出'用寄存器replace当前行',我想听到你的消息(并知道你在哪里find文档)。 可能有一个可重复的EX命令,它比4.2快,并且没有换行符警告。 
你可以在可视模式下使用它。
-  去A线: A
- select具有可视模式的行: V ESC
-  去X行: XG
- input行的替代模式: S
- 粘贴你复制的行: shift + insert (或其他任何你映射的剪贴板粘贴)。
这是我会做的
- 移动A行的开始, A G (其中A是明显的行号)
- 将某行向某个寄存器跳过,例如a(不带新行)。 input“ a y $”
- 移动到插入行X G
- 替补线S
- 从寄存器a插入, Ctrl-R a
您可以在正常模式下使用此命令:
 :AmX | Xd 
  m命令用于m[ove] ,它将行号X后面的行号A移动,如果要复制而不是移动行,请使用co[py] 。  d命令是d[elete] 。 
 你可以移动(使用co复制)一系列的行使用 
 :start,end m X 
 build立在build议使用Vp或VP粘贴在一行上的答案 – 为了避免改变Yank寄存器的内容,我发现最符合人体工程学的命令是: 
 VPY 
- :ay(其中a是行号,例如:20y)。 这一行(双关语打算)。
- VP
我经常需要一行代替多个地方,每个地方都有不同的值(这意味着我不能做一个正则expression式)。
是要抽出所需的原始线
然后在你想要replace的每一行上, V p zero Y
我发现使用Ex命令更容易。 恩。 将第9行移动到46:
  :46|9m.|-1d 
这会将光标移动到第46行,将第9行移到当前的下方,然后删除前一行(因为移动的行是当前行)。
或使用标记,使用标记“a”:
 :46ma a|9m'a|'ad 
我会简单地使用“黑洞”寄存器:
给定:
nnoremap <Cd>“_dd
解决scheme将是:
<Cd> yy