在搜索谷歌之后,我决定写一下stackoverflow,我无法找到关于我的简单问题的任何解决方案,因此我更加惊讶。
问题是:
如何从less中复制特定行?让我们说我正在打开一个男人(默认情况下打开较少)并想要选择并将其复制到剪贴板,之后可以说将其粘贴到vim中打开的文件中?我不想用鼠标滚轮粘贴。我正在寻找一个简单的Ctrl-c
,Ctrl-v
方法,就像在Windows中一样。
打开手册页时,我无法使用' v
'切换到我的默认编辑器(即vim)。关键是因为" Cannot edit standard input
"错误。
非常感谢,如果这个问题很愚蠢,我很抱歉。
答案 0 :(得分:9)
tl; dr,使用m
和|
7g
mx
强> 6g
|x
强> xclip
(Linux)或pbcopy
(macOS),复制到剪贴板。cat > file
,保存到文件,或cat >> file
用于追加模式。在less
的手册页中,我们会得到:
less - opposite of more
要学习的关键事项只有两个less
命令: m (标记), | < / kbd>(管道)。
m
(标记)后跟任何小写字母,用该字母标记当前位置。
我们上面使用的标记为x
,与步骤2中一样,它标记了 7 行x
。
|
(管道)
|
<m>
shell-command
<m>
代表任何标记字母。将输入文件的一部分输入到给定的shell命令 要传送的文件部分 当前屏幕上的第一行和字母标记的位置。
<m>
也可以^
或$
分别表示文件的开头或结尾。如果<m>
为.
或<newline>
,则会显示当前屏幕。
使用 |x
pbcopy
,我们将行范围[7, 6]
传输到pbcopy
,因为行6
当前是屏幕上的第一行,行7
是我们标记为x
的行,pbcopy
是将文本放入macOS剪贴板的命令。
替代方案,在Linux上使用xclip
,甚至dd of=/path/to/file
来保存为文件。
实际上文本范围是包含边界的,因此范围的起始行和结束行都被复制。或者至少复制2行。
我们以向后的方式标记范围,即从下到上,否则less
可能表现得很笨拙,并将整个屏幕扔过管道。
答案 1 :(得分:0)
我想我找到了解决方案:它正在使用tmux。 Tmux提供了它自己的剪贴板(如果我错了,请纠正我)。从tmux我可以进入复制模式,无论我在哪里(在MAN页面,少,控制台输出),让我复制内容。
答案 2 :(得分:0)
当前接受的答案是基于设置标记、导航一行、将当前屏幕向上输送到该标记到剪贴板。
1g
转到第一行)|
RETURN
head -1 | clip
(或 xclip
等)head -1 | tr '\n' '\' | clip
|
将整个屏幕输入到命令中,所以导航到我们想要的开始位置。2-3。 | <m> shell-command
如果 <m>
是 .
或 newline
,当前屏幕是管道传输的。
head -1
只是第一行| tr '\n' '\'
用 \
替换回车符(用于粘贴到 shell)| clip
管道到剪贴板(或 /dev/clipboard
、xclip
等)答案 3 :(得分:-1)
简答: Ctrl + C 和 Ctrl + V 与其他操作相关联。例如, Ctrl + C 向前台进程发送中断信号。通常你需要使用 Ctrl + Shift + C 和 Ctrl + Shift + V ,以便从终端进行复制和粘贴。
答案很长:来自超级用户的very good thread。