使用 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
以上仅复制文本并创建一个包含该文本的新文件。之后您需要删除。
这可以使用相同的范围和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! "
- 将未命名寄存器 ( "
)的内容放入缓冲区
!
) 在那里,以便将内容放在当前行之前。这会导致文件末尾出现空行。没有它,文件顶部有一个空行。这些自定义命令怎么样:
: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)