每天至少有一次我有以下情况:
A: This line should also replace line X
...
X: This is line should be replaced
我相信我没有有效地执行这项任务。
我的所作所为:
这有一个额外的缺点,就是X行现在在默认寄存器中,如果我发现另一行应该用A替换,那就太烦人了。从另一个寄存器中缓冲并粘贴(“ayy ,“aP ”使这项简单的任务效率更低。
我的问题:
答案 0 :(得分:90)
Vp
:选择行,粘贴被拽的内容
答案 1 :(得分:80)
我会做什么:
aG
Y
xG
Vp
您不必离开普通模式,但 拉线。但是,您可以使用V"0p
,这将始终将行拉入第2步。
答案 2 :(得分:43)
这有另外的缺点 该行X现在是默认值 注册,如果我发现这很烦人 另一条应该被替换的线 与A。
要删除文本而不影响正常寄存器,可以使用黑洞寄存器"_
:
"_dd
答案 3 :(得分:9)
我会使用命令行(Ex)模式并执行以下两个命令
:XmA
:Ad
这只是将X行移到A下面,然后删除A移动该行
例如
:7m3
:3d
答案 4 :(得分:9)
答案 5 :(得分:6)
移至第一行的开头。
y , $ - 复制最后没有换行符的行
移至目标线的起点。
V , p - 只替换一个目标线
c , c , Ctrl r , 0 , Esc - 用原始的抽屉替换目标线
移至下一个目标行的开头。
。 - 重复4.2发出的命令。
注意:
4.1是 y , $ 因为如果你做 y , y 或是您将复制换行符, Ctrl r , 0 实际上会在目标行下方添加换行符。
4.2替换 V p ,这对重复不起作用,因为从技术上讲,最后一个动作是删除,所以。会只需删除一行。
如果有人知道如何从EX模式(命令行)发出“用寄存器替换当前行”,我想听听您的意见(并知道您在哪里找到了文档)。可能存在可重复的EX命令,该命令比4.2更快和/或没有断行警告。
答案 6 :(得分:4)
您可以在可视模式下使用它。
A
G X
G 答案 7 :(得分:3)
这就是我要做的事情
答案 8 :(得分:3)
根据建议使用Vp
或VP
粘贴一行的答案 - 为了避免更改yank寄存器的内容,我发现最符合人体工程学的命令就是:
VPY
答案 9 :(得分:2)
您可以在普通模式下使用此命令:
:AmX | Xd
m
命令用于m[ove]
,在行号X后面移动行号A,如果要复制而不是移动行,请使用co[py]
。 d
命令适用于d[elete]
。
您可以使用
移动(使用co
复制)一系列行
:start,end m X
答案 10 :(得分:2)
鉴于cicld最近的评论(谢谢!),我发现我没有完全理解原始问题。移动该行是不合适的,但是复制是可行的(因为该行被取消了。)所以我将其修改为:
var str = 'fooBar/{thing:hi}{thing:hello}'
console.log( str.split('{thing:').slice(1).map(s => s.split('}')[0]) );
在第20行之后复制第一行(:1t20:20d_
是:t
的别名)(将其放置在第21行)
删除第20行,将已删除的行放入“黑洞”寄存器(:copy
)(即不影响当前的yank缓冲区)
如最近的评论中所述,这不会影响当前光标位置。
答案 11 :(得分:2)
您也可以这样做:
Vy (in normal mode at the line you want to copy)
Vp (in normal mode at the line you want to replace)
相同的键可用于拉动/粘贴多行。
V (in normal mode at what you want to yank)
(use jk to move the selection)
y (to yank the selection)
V (in normal mode at where you want to paste)
(use jk to move the selection)
p (to replace the selection with the yanked lines)
答案 12 :(得分:1)
答案 13 :(得分:1)
我发现使用Ex命令更容易;恩。将第9行移至46:
:46|9m.|-1d
这会将光标移动到第46行,将第9行移到当前, 然后删除上一行(因为移动的行是当前行)。
或使用标记,使用标记'a':
:46ma a|9m'a|'ad
答案 14 :(得分:1)
我经常需要Y行并在多个地方替换它,每个地方都有不同的值(这意味着我不能做正则表达式)。
Y 以拉出所需的原始线
然后在你想要替换的每一行上, V p 0 Y
答案 15 :(得分:0)
我会简单地使用"黑洞"寄存器:
下式给出:
nnoremap< C-d> " _dd
解决方案是:
< C-d> yy
答案 16 :(得分:0)
如果您只想更改部分行,您可以这样做:
移动到要复制的文本部分的位置
y,$ - 从光标移动到 EndOfLine
移动到要替换的位置
v,$,p - 用寄存器的内容替换从光标到 EndOfLine 的内容