将内容从一个文件复制并粘贴到vi中的另一个文件

mac*_*cha 238 vi vim cut copy-paste

我正在处理两个文件,我需要从一个文件中复制几行并粘贴到另一个文件中.我知道如何在同一个文件中复制(yy)和粘贴(p).但这不适用于不同的文件,这是怎么做的?

还有,有没有办法剪贴?我试过谷歌搜索,但大多数资源只谈复制粘贴.

Ada*_*kin 203

由于您已经知道如何剪切/抽取文本,因此以下是将其粘贴回另一个文件的一些想法:

  • 编辑第一个文件,取消所需的文本.然后从vi(:e /path/to/other/file)中打开你的第二个文件并粘贴它
  • 在拆分窗口中一起打开两个文件,并使用Ctrl+ w,Up/ 在它们之间导航Down:

    • vi -o /path/to/file1 /path/to/file2
    • 从第一个文件中,Ctrl+ w,s

  • 如果您正在使用2个腻子窗口,则必须使用putty/windows方式进行复制/粘贴.这很简单.使用鼠标标记要复制的内容(您无需执行任何其他操作,标记的文本现在已复制到剪贴板.)切换到其他putty窗口.在vim中输入插入模式(点击i).点击鼠标右键 - 在putty窗口中右键将粘贴剪贴板中的任何内容. (10认同)
  • 你正在做什么是行不通的:在vi中进行Yanking不会将文本放入Windows剪贴板中,并且打开的vim实例之间不会共享yank缓冲区. (2认同)

Jay*_*ayG 49

如果您在Windows中使用VIM,则可以使用以下命令访问剪贴板(MS复制/粘贴):

"*dd - 剪线(或3dd剪3线)

"*yy - 复制一行(或3yy复制3行)

"*p - 在光标后粘贴线

"*P - 在光标前粘贴线

允许您在单独的VIM窗口之间或VIM和PC应用程序(记事本,单词等)之间进行粘贴.

  • 使用`+`作为跨平台系统剪贴板寄存器(Windows和Linux)与`*`,只有Windows(`+`在Windows中与`*`的工作方式相同). (16认同)

Apa*_*ala 39

使用d喜欢的变化dd来剪切.

要将一系列行写入另一个文件,您可以使用:

:<n>,<m> w filename
Run Code Online (Sandbox Code Playgroud)

其中<n><m>是指定一个范围内的行号(或符号).

要使用桌面剪贴板,请查看+g命令.


Win*_*Man 25

您可以打开其他文件并键入:r file_to_be_copied_from.或者你可以缓冲.或者转到第一个文件,转到要复制的行,键入"qY,转到要粘贴的文件并键入"qP.

"buffer_name,复制到缓冲区.Y是猛的,P放了.希望有所帮助!


nos*_*nos 25

这是一种方法;

  • 启动vim并打开file1,这是您正在处理的文件.
  • :e file2将调出file2,即要复制行的文件.
  • 找到要复制的行,如果是3行,则点击 3yy
  • :b1 这将切换到缓冲区1,其中file1是
  • 找出你想要插入你猛拉的线的位置,然后点击 p

您也可以同时查看这两个文件,用例如CTRL+ 分割屏幕w s

至于切割,d切割,并将切割的东西放在缓冲区中.dd将"削减"一条线.

  • 偏离主题:我如何获得那些类似键盘按钮的东西? (2认同)

小智 16

这些都是很好的建议,但如果你知道另一个文件中文本的位置,请轻松使用sed.:r! sed -n '1,10 p' < input_file.txt这将在光标当前位置的已打开文件中插入10行.


小智 8

  1. 确保您编译的 Vim 版本支持剪贴板
    • :echo has('clipboard')应该返回1
    • 如果它返回0(例如 Mac OS X,至少v10.11 (El Capitan)、v10.9 (Mavericks) 和v10.8 (Mountain Lion) - 附带缺乏剪贴板支持的 Vim 版本),则必须安装支持剪贴板的 Vim 版本,例如 via brew install vim(安装后不要忘记重新启动终端)
  2. 输入视觉模式(V- 多行、v- 普通或Ctrlv- 块视觉)
  3. 选择您要复制的行
  4. "*y- 复制选定的
  5. "*p- 粘贴复制的

附:

  • 如果您需要复制并粘贴一行,您可以将步骤 2-5 替换为JayG答案中的说明
  • 为了方便选择行,您可以添加set mouse+=a.vimrc- 它将允许您使用鼠标在 Vim 中选择行,而不选择无关的元素(如行号等)。注意:它将阻止复制鼠标选择的文本的能力从 Vim 到系统剪贴板


小智 7

编辑文件时,在您希望开始和结束的位置使用标记

ma- 设置a标记

mb- 设置b标记

然后,要将其复制到另一个文件中,只需使用以下w命令:

:'a,'bw /name/of/output/file.txt
Run Code Online (Sandbox Code Playgroud)


Lic*_*der 6

201705更新:

我刚刚发现,如果您将以下行添加到vimrc文件中,

设置剪贴板=未命名

然后VIM正在使用系统剪贴板


我只是发现在我在不同的VIM实例窗口之间复制内容的方式上,笨拙的方式行不通。(至少,根据我的VIM知识,它不起作用。我不知道是否还有其他方法可以使它起作用)。

根据我的测试,猛拉方式仅适用于在同一窗口中打开多个文件的方式。

如果您想这样做,则最好使用操作系统的cut-copy-past方式,例如ctrl + x,ctrl + c(在Windows下)。


Lu5*_*u55 6

目标:将一个文件的一部分保存到另一个文件中。

解决方案

  1. 选择要保存的文本:
    • 将光标放在要开始选择的位置
    • v选择字符或大写V选择整行
    • 将光标移动到要选择的内容的末尾
  2. 将选定的文本保存到新文件中。键入:wSpace新文件的名称和名称。其实你会看到

    :'<,'>w new.txt

    然后按 Enter


eck*_*kes 5

在同一个 Vim 实例中打开的两个缓冲区(== 文件)之间复制文本没有问题:

只需使用 猛拉一个缓冲区y(假设您之前在可视模式下标记了一个要复制的区域),然后使用p. 只要它们在同一个 Vim 实例中,它也适用于不同的选项卡。

如何在同一个 Vim 实例中打开两个文件取决于你的系统:

  • 在 Win32 上,如果您选择两个或多个文件,上下文菜单中有一个选项说使用一个 vim 编辑
  • 当你在控制台上时,你可以用 vim file1 file2
  • 如果您使用 Vim 作为另一个工具的编辑器,请务必指定--remote-silent选项以确保所有文件都在同一实例中打开

如果你在两个不同的 Vim 实例中打开了这两个文件,那么你必须使用系统剪贴板:在第一个 Vim 实例中,使用"+y(再次,在可视模式之前标记要在可视模式下被猛拉的区域) ),然后进入第二个Vim和粘贴剪贴板有:"+p


rov*_*lli 5

这些重映射对我来说就像一个魅力:

vmap <C-c> "*y     " Yank current selection into system clipboard
nmap <C-c> "*Y     " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p     " Paste from system clipboard
Run Code Online (Sandbox Code Playgroud)

因此,当我处于可视模式时,我选择了我想要的行并按Ctrl + c然后按Ctrl + v将文本插入接收器文件中.您也可以使用"*y,但我认为有时候很难记住.

这对于将文本从vim复制到剪贴板也很有用.

资料来源:http://vim.wikia.com/wiki/Copy_and_paste_between_sessions_using_a_temporary_file