是否有删除当前行下方一行(或几行)的命令? 目前我在做: jdd然后。根据需要重复。 有没有可以将所有这些结合起来的命令?如何在vim中删除当前行下面的行?
更新:我想要这样的命令的原因是,我不喜欢离开当前位置,但能够删除下面的行。
是否有删除当前行下方一行(或几行)的命令? 目前我在做: jdd然后。根据需要重复。 有没有可以将所有这些结合起来的命令?如何在vim中删除当前行下面的行?
更新:我想要这样的命令的原因是,我不喜欢离开当前位置,但能够删除下面的行。
delete ex命令将很好地工作。
:+,$d
这将删除与当前+1的所有行,直到结束($)
要删除接下来的2行后续的范围会工作,+1,+2
或速记+,+2
:+,+2d
正如@ib提到的:delete
或:d
命令会将光标移动到删除文本旁边的行的开头。 (即使使用nostartofline
设置)。为了克服这个问题,我们可以发出``
正常模式命令。 ``
将跳回到最后一次跳转之前的确切位置,在这种情况下为:d
命令。我们的命令现在是
:+,+d进入``
或者作为一个前命令
:+,+2d|norm! ``
为方便起见,我们在命令包这一切了:
command! -count=1 -register D :+,+<count>d <reg><bar>norm! ``
我们删除下一以下3行:
:3D
该命令还可以采取{reg}
像:delete
和:yank
呢。所以删除接下来的4号线到寄存器a
是:
:4D a
欲了解更多信息
:h :d
:h :command
:h :command-register
:h :command-count
:h ``
请注意,这是一个相当简单的解决方案,可以“开箱即用”,并且可以推广到其他命令(例如,':+ 1,+ 5s!a!b!g'将用4行中的b代替a's在游标之后)。有关更多示例,请参阅:help command-ranges。 – 2010-09-03 01:06:35
这个简单的解决方案会很棒,只要它不移动光标。至少,该命令应该看起来像':+,$ d | norm!\''''。顺便说一下,如问题中所述,问题的作者想要删除当前文件下面的几行,而不一定是一直到文件末尾。 – 2011-10-22 01:39:38
@ib:答案可以通过更详细的范围解释来改善吗?也许'设置sol'?如何使用''''标记? – 2011-10-22 02:09:05
可以定义一个小功能,做你描述的正是: 删除下一n
行当前行下,恢复初始 光标位置。
function! DeleteNextLines(n, reg)
let l = line('.')
let m = min([a:n, line('$')-l])
if m > 0
let c = col('.')
exe '+,+'.m 'd' a:reg
call cursor(l, c)
endif
endfunction
此外,您还可以定义接受线下方 删除计数(一个,默认情况下)的命令,并作为可选 参数(就像:delete
命令)使用的寄存器名。
:command! -range=1 -register -bar D call DeleteNextLines(<count>, <q-reg>)
另外,你可以定义一个映射运行:D
,如果有必要 。
未经测试,但接受为答复,谢谢。 – Valentin 2010-09-02 10:58:31
例如,要映射到逗号,d(按','后跟d)插入以下行(在通过@ib输入以上答案之后) 1:'let mapleader =“,”' 2:'nmap
您可以输入行数删除:Ĵ ddķ。
最后'k'将光标移动到最初的行上方。此外,由于“dd”,光标列位置将丢失。 – 2010-09-02 09:08:36
@ib:不是在我的测试中没有。你真的尝试过了吗?注意最初的** j **。 – 2010-09-02 09:24:52
对不起,我的第一个观点是错误的(当我试过这个命令时,我没有注意到我指定的计数(在你的例子中是'20')大于直到结束时的行数缓冲区)。但第二个仍然存在:光标的列位置在dd之后发生变化(我相信在删除行旁边的第一个非空白字符处)。 – 2010-09-02 09:34:53
这将删除当前下面的所有行:
jdG
不幸的是,将光标移动到当前行的开头删除作出后。
并且会删除每一行直到缓冲区结束。 – 2010-09-02 10:42:55
我误解了原来的问题,对不起。认为OP想要删除当前下面的所有行。改变了我的帖子。 – ClosedID 2010-09-02 11:13:49
应该是公认的答案! – 2016-09-06 13:41:06
这是标记的工作!
尝试maj20dd`a
ma
设置特定文件标记“A”,j20dd
你想要做删除(20线在这种情况下),并`a
恢复你标记的位置(行和列)。
显然这种模式可以扩展到做任何你想要的东西,然后再回到标记。如果您使用mA
(或任何其他大写字母),则该标记在文件中实际上是唯一的,所以您甚至可以在返回之前编辑其他地方。如果你有非常频繁的使用情况,你可以按照上面的建议把它变成一个宏。
其他的解决方案是提供信息,但我觉得它会是简单的使用宏为此:
qq
(开始记录)
jddk
(下去,删掉就行了,回去了 - 即次荷兰国际集团你想要做的)
q
(结束录音)
现在你可以做@q
执行此操作,保持光标在当前位置。您也可以执行诸如[email protected]
之类的操作来删除光标下方的5行。
最后,如果你重复动作一次以上,你可能只是第一次运行@q
(此重复上次使用的宏 - 在这种情况下q
)后键入@@
得好,只要你可以使用xxdd命令即可。大多数时候我知道(至少有一个想法)我正在编辑的脚本的大小。因此,这个命令如下通常绰绰有余:
我认为@Peter Rincker的答案应该被标记为答案 – gixxer 2017-01-13 01:44:16
done @gixxer,谢谢你的支持 – Valentin 2017-01-13 16:42:47