我喜欢在不接触鼠标的情况下使用bash (linux上)。
我经常遇到以下情况。
$ locate libfreetype.a
/usr/lib/x86_64-linux-gnu/libfreetype.a
$ cd /usr/lib/x86_64-linux-gnu 在本例中,我复制/usr/lib/x86_64-linux-gnu/并使用鼠标粘贴它或键入它。我不想这样做。
理想情况下,locate libfreetype.a的输出存储在某个地方(可能会杀死??)并使用C-y命令粘贴它,并在终端上编辑它。
有什么好办法吗?(仅在本例中,有一些智能的单行命令。但这些并不是我们想要的答案。我想要一个通用的解决方案。)
另一个例子
假设我记得在与memo...相同的目录中有一个libfreetype.a,但我忘记了目录名。
$ locate libfreetype.a
/usr/lib/x86_64-linux-gnu/libfreetype.a
$ nano /usr/lib/x86_64-linux-gnu/memo # Tab completion here
$ nano /usr/lib/x86_64-linux-gnu/memo_xxx.txt 如果我能够缓存输出/usr/lib/x86_64-linux-gnu/libfreetype.a并粘贴它,事情就很容易了。(nano $(dirname $(locate libfreetype.a))/memo_xxx.txt适用于这种情况,但如果我想改变路径本身,我需要考虑另一种技术。)
发布于 2017-09-04 19:59:33
正如注释中所指出的,在终端中可能没有这样做的通用方法。但是可以将命令的输出重定向到将stdin复制到剪贴板(如xclip )的程序中。如果要在终端中插入和编辑复制的文本,则需要在复制之前删除换行符。考虑以下脚本:
copy.bash
#!/bin/bash
tr '\n' ' ' | xclip 用法:
$ locate libfreetype.a | copy
$ cd # now press <shift> + <insert>
$ cd /usr/lib/x86_64-linux-gnu/libfreetype.a # continue editingxclip命令将其输入复制到X应用程序中。
tr '\n' ' '命令将所有换行符转换为空格。如果要将文本粘贴到命令行中,则需要这样做。如果输出包含多个换行符,它将剥离尾换行符并连接行。如果使用普通xclip,所有换行符都会按字面顺序粘贴,这会导致bash在粘贴后立即运行命令,因此不允许对其进行编辑。
如果命令的输出(例如locate)是多行的,并且您希望只选择其中一个要复制的(而不是复制all),则可以使用iselect。iselect读取输入并显示用于选择行/行的交互式菜单,并将其打印到standart输出。像这样使用它:
$ locate pattern | iselect -a | tr '\n' ' ' | xlip
# locate prints several lines
# iselect allows user to select one line interactively
# the result is copied to clipboard
$ # <shift> + <insert>这也可以是一个脚本:
icopy.bash
#!/bin/bash
iselect -am | tr '\n' ' ' | xclip( -m选项允许选择几行而不是一行)
用法:
$ locate pattern | icopy这些办法的缺点:
xclip和可选的iselect)顺便说一句,这里是我的本地机器上我经常使用的脚本:
$ cat ~/bin/copy
#!/bin/bash
paste -sd\ | tr -d '\n' | xsel --clipboard
echo "Copied: $(xsel --clipboard --output)" >&2
$ echo hello | copy
Copied: hello链接:man iselect,人肉夹子,曼塔尔,扬克。
发布于 2021-02-28 13:52:03
您可以从您的script (人工脚本)中运行.bashrc,它生成会话输出的实时日志。并绑定用于在编辑器中打开日志文件的快捷方式,以便将已插入的文本插入到$READLINE_LINE中。
但是script从交互式程序(如编辑器)中捕获原始输出,所以如果可以修改script以跳过交互输出,它就可以工作。下一步将是解析输出,以使导航更快。
下面是一个只用于非交互式工具的.bashrc片段:https://asciinema.org/a/395092
发布于 2022-03-24 19:11:41
我注意到这个问题的解决方案是由终端仿真器基蒂给出的。我们可以使用名为“提示”的特性和默认配置的键盘快捷方式。
和原来的问题一样,让我们考虑一下情况。
$ locate libfreetype.a
/usr/lib/x86_64-linux-gnu/libfreetype.a
$ # you want to input /usr/lib/x86_64-linux-gnu here如果您使用的是kitty,您可以键入ctrl+shift+p,然后输入l。您将进入一个模式来从屏幕中选择一行。当您可以选择上一行时,它将粘贴到当前终端输入中。
如果在正式文件中找到详细信息的话。与该操作相关的配置如下所示。
map ctrl+shift+p>l kitten hints --type line --program -这意味着kitten hints --type line --program -是从ctrl+shift+p映射出来的命令,后面是l。
https://stackoverflow.com/questions/35434291
复制相似问题