将选择移动到单独的文件

gre*_*ire 12 vim

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

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

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

前

一个.txt

sometext
some other text
some other other text
end
Run Code Online (Sandbox Code Playgroud)

后

一个.txt

sometext
end
Run Code Online (Sandbox Code Playgroud)

b.txt

some other text
some other other text
Run Code Online (Sandbox Code Playgroud)

emb*_*yle 11

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

各种例子:

  • :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 ( !) 在那里,以便将内容放在当前行之前。这会导致文件末尾出现空行。没有它,文件顶部有一个空行。

  • 很好的解决方案!您也可以将其写为`'&lt;,'&gt;d | 新 | 0为了清楚起见,输入“`。 (2认同)

Ing*_*kat 5

这些自定义命令怎么样:

: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 _
Run Code Online (Sandbox Code Playgroud)