我刚刚发现可以在中添加以下行~/.vimrc
。
set mouse=a
:vmap <C-C> "+y
这样的效果是可以用鼠标选择文本(即在可视模式下),然后使用Ctrl+ 将实际文本复制到X剪贴板c。这与终端的默认副本不同,因为它是我要复制的真实文本,而不是终端看到的内容。例如,如果文本中有选项卡,则以前我会将它们复制为空格。
有没有办法减少行为方式相同的行为?即我可以逐字复制正在查看的文本文件中的内容吗?
我刚刚发现可以在中添加以下行~/.vimrc
。
set mouse=a
:vmap <C-C> "+y
这样的效果是可以用鼠标选择文本(即在可视模式下),然后使用Ctrl+ 将实际文本复制到X剪贴板c。这与终端的默认副本不同,因为它是我要复制的真实文本,而不是终端看到的内容。例如,如果文本中有选项卡,则以前我会将它们复制为空格。
有没有办法减少行为方式相同的行为?即我可以逐字复制正在查看的文本文件中的内容吗?
Answers:
不,
我认为您不能直接做到这一点,因为less开头没有光标。
它需要一个导航才能选择文本的开头和结尾。
less
并不是字符级导航的正确工具。
您可以使用键shift和鼠标进行选择。这是由终端而不是更少地处理。但是终端不知道空格和制表符的排列方式-内部对制表符的解释较少,只在屏幕上写入普通的“ ”字符。
有喜欢的工具screen
,tmux
并且byobu
,它可以做很多让人印象深刻在这个区域。我没有检查,但我假设这些终端多路复用器没有解决办法-最终是终端-并会表现相同。
如果您在显示一个文件less
,有一个很好的解决方案:
按键v在less
中打开当前文件vim
- asuming你$EDITOR
等设置的vim
。
从管道等显示stdin时,此方法不起作用,尽管有解决方法。
但是您至少可以使用鼠标滚轮滚动:
这似乎甚至默认情况下处于启用状态,但是鼠标滚轮事件被其他选项抑制。
为了进行快速测试,请尝试:
LESS=-r man less
选项-X
(--no-init
)阻止滚动-检查您的环境变量LESS
包含哪些内容:
$ echo $LESS
选项-q
(--quiet
,--silent
)也引起麻烦,根据SU:如何使鼠标滚轮滚动使用bash和gnome末端少寻呼机?
v
关键是太棒了!(我已经采取了一种很酷的解决方法来使它也可以在管道中使用。)终端仿真器(终止符)中的FWIW选择文本时,我不必按住shift键。
vimpager
,您可以用它来代替less
批发。它实际上只是使用vim
包装在一个小的脚本中的。
vimpager
工作,直到它起作用为止。(我努力在启动vim
时不激活所有插件vimpager
...)
您可以less
通过输入来将显示的第一行复制到X11 CLIPBOARD选择中less
:
|.head -n1|xclip -sel c<Enter><Enter>
这会将较少的缓冲区从顶行到.
标记(实际上是整个屏幕内容)通过head -n1|xclip -sel c
管道传递给命令(以将其第一行存储在CLIPBOARD选择中)
您可以配置终端仿真器以在给定的按键上粘贴该字符串,或将其绑定到按键绑定中的按键或按键组合less
。例如,将其绑定到Alt+C:
printf '%s\n' '#commands' '\ec pipe .head -n1|xclip -sel c\n' | lesskey -
但是请注意,Enter此后您将按一下以确认“ |完成(按RETURN)”提示。
使用xterm
,您还可以在此处定义一个新的选择模式,例如在Ctrl+Alt扩展选择时可以保持该状态,该选择告诉您less
要从当前屏幕复制哪些行:
编写如下lesspaste
脚本:
#! /bin/sh -
start=${1%%";"*}
end=${1#*" "}
end=${end%";"*}
head -n "$((end))" | tail -n "$((end - start + 1))" | xclip -sel c
并定义xterm转换表(在此处进行测试,但您需要将其添加到X资源文件中):
xterm -xrm 'XTerm.VT100.translations: #override \
Meta Ctrl<Btn1Down>: select-start()\n\
Meta Ctrl<Btn1Motion>: select-extend()\n\
Meta Ctrl<Btn1Up>: select-end(SECONDARY) \
insert-formatted("|.lesspaste '\''%P %p'\''\n\n", SECONDARY)'
然后,您可以通过按住并拖动鼠标来标记要粘贴的行Ctrl+Alt,并在释放Button 1时,xterm不会告诉我们将当前屏幕通过lesspaste
脚本的开始和结束坐标作为一个参数(y1;x1 y2;x2
)传递给脚本。
(请注意,如果less
与一起使用它-s
来挤压空白行,则它可能无法正常工作(这是由调用时的典型情况man
),因为馈入的输入lesspaste
将不会挤压其空白行(因此行号偏移量可能是错误的)) 。
less
应该给任何形式的反馈?j
似乎没有为我做任何事情。
less
,在默认键绑定中j
向下滚动一行(forw-line
)(实际上J
(forw-line-force
)会更好,我将进行编辑)。|
应该给您一些反馈。(提示输入标记,然后输入命令)。
j
什么都不做的原因。现在第一个选项有效(+1)。第二个选择似乎有些复杂,但有一些警告,所以我没有尝试。我认为v
对我来说已经足够了。