将选择内容移到单独的文件


12

使用vim,如何将一段文本移动到新文件?目前,我这样做:

  • 选择文字
  • :w new_file
  • 再次选择文本
  • 删除文字

有没有更有效的方法可以做到这一点?

之前

a.txt

sometext
some other text
some other other text
end

a.txt

sometext
end

b.txt

some other text
some other other text

Answers:


4

这些自定义命令如何:

:command! -bang -range -nargs=1 -complete=file MoveWrite  <line1>,<line2>write<bang> <args> | <line1>,<line2>delete _
:command! -bang -range -nargs=1 -complete=file MoveAppend <line1>,<line2>write<bang> >> <args> | <line1>,<line2>delete _

1
这非常丑陋,但是,嘿,它似乎完全按照我的要求(尝试)完成了一步。+1,并被接受。我一直在寻找一种快速执行此操作的本地方法,但是由于似乎没有这种方法,您的方法会做的很好。谢谢!
greg0ire 2013年

1
美在旁观者的眼中。我觉得这很优雅;您只需要输入一次即可(输入.vimrc)。
Ingo Karkat 2013年

没错,“非常丑陋”应该“非常陌生”。您的命令非常方便,我想我一定会在我的.vimrc中雕刻它
greg0ire 2013年

8

通过“将一段文本移动到新文件”,我假设您的意思是从当前文件中剪切出该段文本并创建一个仅包含该文本的新文件。

各种示例:

  • :1,1 w new_file 创建一个仅包含第1行文本的新文件
  • :5,50 w newfile 创建一个包含第5行到第50行文本的新文件
  • :'a,'b w newfile创建一个包含文本从标记一个新的文件a,以标志b
    • 通过使用ma以及mb您喜欢的任何地方设置标记

上面的代码仅复制文本并创建一个包含该文本的新文件。然后,您需要随后删除。

可以使用相同的范围和d命令来完成此操作:

  • :5,50 d 从第5行到第50行删除文本
  • :'a,'b d从标记删除文本a来标记b

dd用于单行情况。

如果改为使用可视模式选择文本,然后:在选择文本时单击,则在命令行上将看到以下内容:

:'<,'>

指示所选文本。然后,您可以将命令扩展为:

:'<,'>w >> old_file

它将文本附加到现有文件。然后如上所述删除。


一班轮:

:2,3 d | new +put! "

细目:

  • :2,3 d -删除第2至3行
  • | -从技术上讲,这会将第一个命令的输出重定向到第二个命令,但是由于第一个命令不输出任何内容,因此我们只是将命令链接在一起
  • new -打开一个新的缓冲区
  • +put! "-将未命名寄存器(")的内容放入缓冲区
    • bang(!)在那里,因此将内容放置当前行之前。这会导致文件末尾出现空行。没有它,文件顶部将有一个空行。

你的假设是对的。看起来不错,我要测试。你能解释2.多一点吗?我对范围不是很熟悉。编辑:如果我在第二行尝试此操作,它将第一行写入另一个文件,而不是第二行。
greg0ire 2013年

@ greg0ire我有点倒退了,我将进行编辑以更好地解释
Embedded.kyle

我添加了一个示例来使我的问题更清楚。
greg0ire 2013年

@ greg0ire我更正了我的答案。这仍然是两个步骤。第一个复制并写入。第二个删除。
Embedded.kyle

1
不错的解决方案!您也可以写'<,'>d | new | 0put "清楚。
atripes

1

基于@ embedded.kyle的回答和此问答,我最终得到了这条划线,将选择内容附加到文件中并从当前文件中删除。用选择了几行后Shift+V,点击:并运行:

'<,'>w >> test | normal gvd 

第一部分附加选定的行。第二个命令进入普通模式并运行gvd以选择最后一个选择,然后删除。


0

在可视模式下选择文本,然后按y将其“猛拉”到缓冲区中(复制)或d将其“删除”到缓冲区中(剪切)。

然后,您可以:split <new file name>拆分vim窗口,然后按p粘贴在选中的文本中。正常写入文件。

要再次关闭拆分,请传递您要关闭的拆分:q


1
目前,我有4个步骤:选择,编写,选择,删除。使用您的方法,我有6个步骤:选择,删除,拆分,粘贴,写入,关闭。我要求更有效的方法:P
greg0ire 2013年

好吧,如果您:x改为通过拆分,则可以将书写和结尾合二为一,并分为五个步骤。:P
Xyon

更好,但5仍然> 4:P
greg0ire 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.