【发布时间】:2010-12-09 20:28:20
【问题描述】:
有没有办法在VI编辑器中将所有行从打开的文件复制到剪贴板。我试过 yG 但它没有使用剪贴板来存储这些行。
那么有可能吗?
【问题讨论】:
-
如果您在 Windows 上并且 yank 不起作用,请参阅顶部的第 17 个答案:stackoverflow.com/questions/1620018/…
标签: vim editor keyboard-shortcuts vi
有没有办法在VI编辑器中将所有行从打开的文件复制到剪贴板。我试过 yG 但它没有使用剪贴板来存储这些行。
那么有可能吗?
【问题讨论】:
标签: vim editor keyboard-shortcuts vi
【讨论】:
set clipboard=unnamed,但是效果很好!
E850: Invalid register name:(
E850: Invalid register name,请尝试 :%y"+ 将所有内容复制到剪贴板并 "+p 粘贴跨度>
【讨论】:
" 之后按空格。
:version,然后查找 +xterm_clipboard 标志。如果它前面有一个减号,那么您将没有此功能。如果是这种情况,您可能需要自己编译 vim,或者运行通常启用此功能的 gvim。
在 Mac 上
复制所选部分:可视选择文本(正常输入v或V
模式)并输入:w !pbcopy
复制整个文件:%w !pbcopy
从剪贴板过去:r !pbpaste
【讨论】:
pbcopy 是一个 Mac 实用程序。在 Linux 上,xsel 可以代替,或者在 Windows 上clip。
:%w !pbcopy 如果文件长于终端高度,仍然有效。
剪贴板是缓冲区+。要复制到剪贴板,请执行 "+y 和 [movement]。
所以,gg"+yG 将复制整个文件。
同样,从剪贴板粘贴,"+p
【讨论】:
如果您在使用 VI 时遇到问题,另一种复制整个文件的简单方法是键入“cat 文件名”。它会将文件回显到屏幕上,然后您可以上下滚动并复制/粘贴。
【讨论】:
:!cat %。并以编程方式将文件的内容复制到 Mac OS 上的剪贴板::!cat % | pbcopy
这是我拉整个文件的方法:
ggVGy
【讨论】:
clipboard 设置为将被拉出的文本复制到+ 中。
您可以使用“cat”命令打开文件并使用鼠标复制
【讨论】:
reset 终端,然后全选复制。这适用于ssh 会话。
(回复@rshdev,并避免在OP 上的cmets 中使用每个@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 中是这样。
至少在 Ubuntu 终端 (Gnome) 下,标准副本也可以工作 (CTRLSHIFTC,尽管似乎没有是 select all 的标准键盘快捷键(除了 ALTE 后跟 A)。
【讨论】:
将整个文件复制到 vim 或其选项卡中
y G
然后移动到标签并粘贴
p
并剪切整个文件使用
d G
【讨论】:
:%y a 将所有内容拖入 vim 的缓冲区,
在命令模式下按p 会将被拉出的内容粘贴到光标当前所在的行之后。
【讨论】:
:set go=a
ggVG
见: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.
【讨论】:
我尝试了人们上面提到的一些命令。没有工作。 然后我掌握了其中最简单的一个。
第 1 步:vi <filename>
步骤 2:右键单击 Putty 窗口的标题栏
第 3 步:选择“清除回滚”(以避免复制 SSH 会话的其余部分)
第4步:再次右键单击并选择“全部复制到剪贴板”。
【讨论】:
Window > Settings > lines of scrollback 增加到 40000(也可以通过右键单击标题栏获得)。它还有助于使用cat 而不是 vi,因为它会滚动所有文本。
Bill Joy 的 vi 中没有“剪贴板”的概念,所以我认为没有内置的方法可以做到这一点。
gVim 的自动将任何突出显示的内容复制到剪贴板功能最简单,或者通过 :! 使用外部程序!
我使用 Cygwin 的 vim
:%!putclip
u
也许 Ubuntu 有一个像 putclip 这样的 CLI 应用??
【讨论】:
嗯,所有这些方法都很有趣,但是作为懒惰的程序员,我通过使用数字 + y 的组合来使用 yank all line
例如你有一个总共78行的源代码文件,你可以这样做:
gg 在第一行获取光标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><C-a> 和 <Leader><C-c>。
【讨论】:
我知道这应该解决十年,但前两个答案对我不起作用,所以我一直在挖掘。在 Redhat(远程服务器)- Windows 10(本地计算机)上,如果您无法用鼠标选择整个内容,您将被卡住,因为通常的副本在远程计算机和本地计算机剪贴板之间不起作用。
所以,要在远程 Linux 上复制并在本地 Windows 上粘贴,请使用 * 指定主缓冲区并执行漂亮的双击操作
使用 gg" * yy kbd>.
【讨论】:
这是一个使用 CTRL+a 将所有内容全选到剪贴板的映射命令:
"
" select all with control-a
"
nnoremap <C-a> ggmqvG"+y'q
将它添加到您的 .vimrc 中,您就可以开始了...
【讨论】:
你可以使用一个shortcur,比如这个:
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。
Here 更多关于 vim wikia 的信息。
【讨论】:
我在 PowerShell 中使用 Vim,当我需要将 一小段代码 复制到 Windows 剪贴板时;
我使用:set nonumber 删除行号,然后用光标直观地选择代码并右键单击。然后我用 Ctrl + V 将它粘贴到我想要的任何位置。
【讨论】:
我无法使用上面的答案复制文件,但我有腻子,我在 Quora 上找到了解决方法。
注意:它将该会话的所有打印字符复制到日志文件中,因此最终会变大。在这种情况下,请删除日志文件并对目标文件进行分类,以便将该特定文件的内容复制到您的计算机上。
【讨论】:
单击鼠标左键,拖过要复制的部分并释放。代码会自动复制到剪贴板。
【讨论】:
vi 方式)。