如何使用键盘从terminal复制和粘贴?

我试图尽量远离使用鼠标(只是一个宠物项目)。 我知道,在terminal,你可以做ck切割线和cu粘贴回到同一个terminal,但我正在寻找的东西,我可以在terminal复制到gnomes剪贴板的一行,所以我可以粘贴它成为一个浏览器或其他。

我知道,如果我用鼠标突出显示文本,我可以用shift-insert来粘贴文本,这很棒,但是现在我只想在没有鼠标的情况下做到这一点。 像emacs中的c-space突出显示(但是,即使这不会复制到gnome剪贴板)。

谢谢

还有一些更明确的说法,我打开了几个不同的terminal,并且在很多地方我都使用了像xclip / xsel这样的公用程序没有帮助的各种远程机器。

在这里表示 ,GNOME复制和粘贴的默认命令是CTRLSHIFTCCTRLSHIFTV。

编辑:我发现了一个有用的博客文章 ,允许您在GNOME中启用terminal复制/粘贴到CTRLCCTRLV

Shift + Insert来粘贴。 我想是你需要的,但是我不知道如何从terminal复制。

要从命令行与X11剪贴板交互,请参阅此问题 。


也许一个侧面跟踪你要求什么,但terminal窗口交互,我可以推荐屏幕 ,在那里你使用键来复制和粘贴(从一个可search的回滚缓冲区!)。 复制和粘贴操作只能在屏幕控制的窗口之间进行,虽然您可以像terminal窗口和cu&ck一样描述,但是您可以轻松地将其转储到/ tmp / screen-xchange,然后使用xclip复制到X11剪贴板。

这很容易! 只需运行两个命令,您就可以使用Ctrl+C Ctrl+V进行复制和粘贴!

 gconftool-2 -t str -s /apps/gnome-terminal/keybindings/copy "<Control>c" gconftool-2 -t str -s /apps/gnome-terminal/keybindings/paste "<Control>v" 

快乐的复制粘贴!

我尝试了什么hlovdalbuild议和使用GNU screenxclip 。 结果是一个简单的脚本:

cat /tmp/screen-exchange | xclip

我在.screenrcconfiguration了Ca e

bind e exec !!! $HOME/bin/screen-exchange-to-primary

那么我只需在Ca [屏幕上input复制/回滚模式Ca [用/标记/select>并使用Ca e复制到初级select。 也许不是最顺利的组合顺序,但这是迄今为止最好的。

你可以在Emacs里面运行这个shell,然后你可以select并复制到剪贴板,就像在Emacs中那样。

至于“在Emacs里面运行shell”,有几个选项: Mx shellMx eshell和各种基于term / eterm / ansi-term的东西(模式)(这些“* term”必须更好, )

至于我个人,试图远离鼠标,我尝试主要使用eshell (通常我不需要curses应用程序), emacs-w3m用于网页浏览,只是Emacs主要用于其他任何事情,而作为窗口的鼠标经理。

我知道如果你的shell程序是bash或tcsh,它使用readline库来进行行编辑,所以Control-K函数由readline处理,并存储在shell程序中的“kill-ring”缓冲区中。 从shell中窃取kill ring的内容是不可能的(除非你的shell有特殊的function编程),但你可以通过configuration.inputrc来重新configurationControl-K来执行一些其他的操作文件在您的主目录中。 所以你可以configuration它来执行一个macros,例如,输出文本“xclip -in \ n”,然后将kill-ring的内容与“Control-D”操作一起转储到输出,以终止文本。 这大部分都是在readline手册页中解释的。

我从来没有尝试过这样的东西,所以我不知道这是否会起作用,但这是我首先尝试的路线。

很长一段时间,我也试图理清它,使用vt100.translations。

取自http://www.fifi.org/doc/xterm/xterm.faq.html#future_work

 "XTerm*vt100.translations: #override \n\ <Key>Insert: string(\001) \n\ Shift <Key>Up: scroll-back(1,lines) \n\ Shift <Key>Down: scroll-forw(1,lines) \n\ Shift <Key>Right: string(0x1b) string("f") \n\ Shift <Key>Left: string(0x1b) string("b") \n\ Shift <Key>Delete: string(0x1b) string(0x08) \n\ Shift <Key>Tab: string(0x1b) string("*") \n\ <Key>0x1000FF0D: scroll-back(1,page) \n\ <Key>0x1000FF0E: scroll-forw(1,page) \n\ <Key>0x1000FF09: string(\010) \n\ <Key>0x1000FF0A: string(\005) \n\ <Key>BackSpace: string(0xff) \n\ <Key>Select: select-start() \n\ <Btn1Motion>: select-extend() \n\ <Key>0x1000FF02: select-end(PRIMARY,CUT_BUFFER0) \n\ Meta <Key>0x1000FF02: select-end(CLIPBOARD) \n\ <Key>0x1000FF04: insert-selection(PRIMARY,CUT_BUFFER0) \n\ Meta <Key>0x1000FF04: insert-selection(CLIPBOARD) \n\ <Key>F1: string(0x1b) string("OP") 

没有成功

好的,如果我们已经为select-start select-end ..extend设置了一些键,但是如何将它们移到光标处。

GNU屏幕可能是解决scheme,但它不会在zsh中正确,我们不能在Xclipboard带来剪切文本。

我可以build议RatPoison作为你的窗口pipe理器吗? 顾名思义,你根本不需要鼠标。 我不知道它如何处理剪贴板,因为我只是用它来玩乐。 这可能取决于你正在使用的terminal程序。

这是一个超级笨拙的黑客攻击,但它可以在terminal上使用键盘(和一个python脚本)复制上一次运行命令的最后一行输出,它可以在ssh上运行。

这是你如何使用它。

  1. 在GNOMEterminal(或类似的),Alt + E,答:这是全选。
  2. 如果你在ssh中,在本地机器上打开一个不同的terminal。
  3. 运行附加的脚本,我称之为我的机器上的最后一行。

然后你有一行文字,在你的gtk剪贴板上没有换行符。 该脚本通过使用xselect剪贴板来select所有terminal的文本,并将其倒数第三行放在gtk剪贴板上。 可以修改该脚本以selectxselect的不同部分,这将对应于terminal的文本缓冲区的不同部分。 然而,从交互式光标还有很长的路要走:(

如果gnome-terminal集成键盘驱动的select支持,那将会很棒。

这个例子在gtk剪贴板上放置“/ usr / bin / gcc”(记得在运行lastline前全选):

 $ which gcc /usr/bin/gcc $ lastline 

这是我打电话给lastline的脚本:

 #!/usr/bin/env python import sys, subprocess import optparse __version__ = "0.1" def main(): try: process = subprocess.Popen(["xsel"], stdout=subprocess.PIPE) except OSError: sys.exit("you must install xsel") (stdout, _) = process.communicate() lines = stdout.split("\n") if len(lines) < 3: text = "" else: text = lines[-3] import gtk clipboard = gtk.clipboard_get() clipboard.set_text(text) clipboard.store() if __name__ == "__main__": parser = optparse.OptionParser(version=__version__) (options, args) = parser.parse_args() main()