繁体   English   中英

将所有行复制到剪贴板

[英]Copy all the lines to clipboard

有什么方法可以在 VI 编辑器中将所有行从打开的文件复制到剪贴板。 我试过y G但它没有使用剪贴板来存储这些行。

那有可能吗?

采用:

: % y +

猛拉所有线路。

解释:

  • %引用下一个命令在所有行上工作
  • y猛拉那些线
  • +复制到系统剪贴板

注意:在 Windows 中, +*是等效的,请参阅此答案

您应该将文本拉到*+ 寄存器

g g " * y G

解释:

  • gg将光标移到文件的第一个字符
  • "*y从第一行开始对寄存器*执行 yank 命令,直到...
  • G转到文件末尾

在 Mac 上

  • 复制所选部分:视觉选择文本(在正常模式下键入vV )并键入:w !pbcopy

  • 复制整个文件:%w !pbcopy

  • 从剪贴板过去:r !pbpaste

剪贴板是 buffer + 要复制到剪贴板,请执行" + y和 [移动]。

因此, g g " + y G将复制整个文件。

同样,要从剪贴板粘贴, " + p

如果您在使用 VI 时遇到问题,复制整个文件的另一种简单方法是键入“cat 文件名”。 它会将文件回显到屏幕上,然后您可以上下滚动并复制/粘贴。

这就是我为拉取整个文件所做的:

ggVGy

您可以使用“cat”命令打开文件并使用鼠标复制

(回复@rshdev,并避免在对 OP 的评论中使用 @nelstrom 的 +xterm_clipboard 重新编译 vim)

有一个名为 xclip 的程序,其工作方式类似于 Ubuntu 11 上的 putclip:

:%!xclip -sel clip
u

它不是默认安装的。 安装,使用:

sudo apt-get install xclip

在 Ubuntu 12 上

你可以尝试安装vim-gnome包:

sudo apt-get install vim-gnome

我试过了,因为vim --version告诉我它会禁用标志xterm_clipboard (由-表示),这是使用剪贴板功能所必需的。

-> 在 Ubuntu 12 上安装vim-gnome包也安装了一个基于控制台的 vim 版本,它启用了这个选项(在 xterm_clipboard 标志之前用+表示)

在 Arch Linux 上

出于同样的原因,您可以安装vim-clipboard

如果您运行 neovim,那么您应该安装xclip (如help clipboard-tool

您可以按 gg 将光标定位到文件的开头,然后按 yG 将所有内容从头到尾(G 定位)复制到缓冲区。祝您好运!

如果您在可视模式下使用 Vim,标准的剪切和粘贴键也适用,至少在 Windows 中是这样。

  • CTRL A 的意思是“标记整个文件。
  • CTRL C表示“复制选择。
  • ESC表示“取消选择,因此您的下一次按键不会替换整个文件:-)

至少在 Ubuntu 终端(Gnome)下,标准副本也可以工作( CTRL SHIFT C ,尽管似乎没有用于全select all的标准键盘快捷键(除了ALT E后跟A )。

:%ya所有内容拉入 vim 的缓冲区,在命令模式下按p会将拉出的内容粘贴到光标当前所在的行之后。

我尝试了人们上面提到的一些命令。 没有一个工作。 然后我掌握了其中最简单的一个。

第 1 步: vi <filename>
第二步:右键点击Putty窗口的标题栏
第 3 步:选择“清除回滚”(以避免复制 SSH 会话的其余部分)
第 4 步:再次右键单击并选择“全部复制到剪贴板”。

将整个文件复制到 vim 或其选项卡中

y G 

然后移动到一个选项卡并粘贴

p

并削减整个文件的使用

d G

gVim:

:set go=a

G G V G

请参阅:help go-a

'a' Autoselect:  If present, then whenever VISUAL mode is started,
 or the Visual area extended, Vim tries to become the owner of
 the windowing system's global selection.  This means that the
 Visually highlighted text is available for pasting into other
 applications as well as into Vim itself.  When the Visual mode
 ends, possibly due to an operation on the text, or when an
 application wants to paste the selection, the highlighted text
 is automatically yanked into the "* selection register.
 Thus the selection is still available for pasting into other
 applications after the VISUAL mode has ended.
     If not present, then Vim won't become the owner of the
 windowing system's global selection unless explicitly told to
 by a yank or delete operation for the "* register.
 The same applies to the modeless selection.

Bill Joy 的 vi 中没有“剪贴板”的概念,所以我认为没有内置的方法来做到这一点。

gVim 的自动将任何突出显示的内容复制到剪贴板功能是最简单的,或者通过 :!

对于 Cygwin 的 vim,我使用

:%!putclip
u

也许Ubuntu有一个像putclip这样的CLI应用程序??

好吧,所有这些方法都很有趣,但是作为懒惰的程序员,我通过使用 number + y组合使用 yank all line

例如,您有总共 78 行的源代码文件,您可以执行以下操作:

  1. gg在第一行获取光标
  2. 插入 78 + y --> 它在光标和当前行下方拉出 78 行

我已将以下行添加到我的 .vimrc

nnoremap <F5> :%y+<CR>

这允许我通过按F5 (在命令模式下)将 Vim 中的所有文本复制到剪贴板。

如果您的手指默认为CTRL-A CTRL-C ,请尝试$VIMRUNTIME/mswin.vim的映射。

" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y

" CTRL-A is Select all
noremap <C-A> gggH<C-O>G
inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
cnoremap <C-A> <C-C>gggH<C-O>G
onoremap <C-A> <C-C>gggH<C-O>G
snoremap <C-A> <C-C>gggH<C-O>G
xnoremap <C-A> <C-C>ggVG

我将它们映射到<Leader><Ca><Leader><Cc>

我知道十年应该解决这个问题,但前两个答案对我不起作用,所以我继续挖掘。 在 Redhat(远程服务器)- Windows 10(本地机器)上,如果您无法用鼠标选择整个内容,您就会被卡住,因为通常的副本在远程和本地机器剪贴板之间不起作用。

因此,要在远程 Linux 上复制并粘贴到本地 Windows 上,请使用*指定主缓冲区并进行一次不错的双拉

使用g g " * y y

这是一个使用CTRL + a将所有内容全选到剪贴板的地图命令:

"
" select all with control-a
"
nnoremap <C-a> ggmqvG"+y'q

将它添加到您的.vimrc 中,您就可以开始了...

您可以使用快捷方式,如下所示:

noremap <F6> :%y+<CR>

这意味着,当您在正常模式下按 F6 时,它将复制整个文件,并将其添加到剪贴板。 或者您可以在正常模式下输入:%y+然后按Enter

虽然上面的许多答案都很好,但这些解决方案都不适合我,因为我使用的是 Ubuntu 16.04 附带的默认 VIM 安装,并且默认情况下没有安装剪贴板选项。 我还想将文本粘贴到外部程序中。

有效的解决方案:Ubuntu 的默认终端允许您通过按Edit然后Select All来突出显示整个内容。

我创建了一个函数来执行这个操作,把它放在你的~/.vimrc

fun! CopyBufferToClipboard()
    %y+
endfun
nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
command! -nargs=0 CopyFile :call CopyBufferToClipboard()

OBS:如果你使用的是 Neovim,你还需要一些像 xclip 这样的剪贴板管理器。 有关更多信息,请输入 neovim :h checkhealth

同样重要的是要提到并不总是一个简单的y会复制到剪贴板,为了使每个复制源+至“剪贴板寄存器”尝试设置: :set clipboard=unnamed,unnamedplus 更多信息参见: :h unnamed

这里有更多关于 vim wikia 的信息。

我在PowerShell 中使用Vim ,当我需要将一小段代码复制到 Windows 剪贴板时;

我使用:set nonumber来删除行号,然后用光标和右键单击直观地选择代码。 然后我用Ctrl + V 将它粘贴到我想要的任何地方。

简单易行的方式:

如果您在 windows 中并且想要将整个文本复制到您的本地剪贴板而不是您正在使用的远程服务器缓冲区,则不需要任何额外的工具,只需:

  1. 缩小以在屏幕上查看整个文件文本
  2. 用鼠标 select 所有这些然后右键单击复制到本地剪贴板

注意 1:如今在许多终端(如 window 终端)上,您可以使用 ctrl++/ctrl+- 放大/缩小并使用 ctrl+0 重置缩放大小

注 2:如果您的 vim 是文件的编号行,您可以:set nonumber

我无法使用上面的答案复制文件,但我有腻子,我在 Quora 上找到了解决方法。

  1. 更改 PuTTY 会话的设置,转到日志记录并将其更改为“可打印字符”。 设置日志文件
  2. 做相应文件的猫
  3. 转到您在步骤 1 中设置的文件,您将在日志文件中看到您的内容。

注意:它将该会话的所有打印字符复制到日志文件中,因此最终会变大。 在这种情况下,删除日志文件并 cat 目标文件,以便在您的机器上复制该特定文件的内容。

单击鼠标左键,在要复制的部分上拖动并释放。 代码会自动复制到剪贴板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM