readline(3) 联机帮助页列出了这四个(vi、vi-move、vi-command、vi-insert)作为keymap设置的可能选项。我试过设置这些不同的选项,但它们似乎没有任何影响set editing-mode vi。
回答这个问题最简洁的方法可能是举例说明变化如何keymap产生影响。
来自联机帮助页的引用:
keymap (emacs)
Set the current readline keymap. The set of legal keymap names
is emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,
vi-command, and vi-insert. vi is equivalent to vi-command;
<<snip>>
Run Code Online (Sandbox Code Playgroud) 我读过使用“for”不是在 bash 中读取行的好方法。许多人说这充其量是笨拙和低效的,并且在很多情况下都失败了。
我想知道在 bash 中阅读行的最佳方式是什么。谢谢。
例如:
$ for i in $(<afile); do echo "$i"; done
Run Code Online (Sandbox Code Playgroud) 我知道使用 readline 您可以使用 emacs 或 vi 命令来编辑多个交互式文本程序的输入。我想知道是否存在这样一个类似的工具来控制 Gnome 或任何其他桌面环境中的整个桌面。
也许它可能是一个程序,它拦截击键并以 vi 的方式处理它们,将字符序列转换为桌面命令,并将仅在插入模式下写入的文本传送到活动窗口。
你知道这样的工具吗?
在 bash/readline 中,如果你想浏览一个命令,通常你会有这样的事情:
cat /home/foo/bar.txt /home/bar/baz.txt
Run Code Online (Sandbox Code Playgroud)
如果我的光标位于行尾 (^e),并且我想移回第二个参数的开头,我该如何移至(下一个/上一个)空格?
Readline 具有内置的Meta-f(forward) 和Meta-b(backwards),但它们将停在路径中的斜杠处,而不是一直移动到空白处。
vim 有W和B哪个将执行此操作,但默认情况下在 readline/bash 中未启用 vim 移动模式。
我想按下M-j并让 readline 将光标放在下一行而不输入命令。因此,我应该能够将一个角色返回到上一个角色。线。这个答案说它不能完成。我认为这是错误的。
您可以杀死换行符,然后猛拉它。这实现了我想做的事情。但是我无法创建绑定。
要测试此类型: echo <<EOFRETURNENTERC-cC-pM-1C-dC-c
现在你应该在一个换行符上,输入C-y. 它做我想要的!但这是什么性格?什么绑定在 inputrc 文件中有效?
编辑:原来这个字符是一个换行符。还是不知道怎么绑定。
我在我的 Ubuntu 11.10 PC 上安装了 PHP 5.4,如下所示:
$ sudo add-apt-repository ppa:ondrej/php5
$ sudo apt-get update
$ sudo apt-get install php5
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我不再拥有readlinePHP CLI 脚本所需的功能。libreadline-dev已安装并readline在 5.3 中完美运行。
我还尝试使用 readline 编译 5.4:
$ wget http://de2.php.net/get/php-5.4.0.tar.gz/from/de.php.net/mirror
$ tar xzvf mirror
$ cd php-5.4.0/
$ ./configure --with-readline
$ make test
Run Code Online (Sandbox Code Playgroud)
但是最后一个命令在编译几分钟后回显了这个错误:
失败的测试摘要 测试 7:DTD 测试 [ext/dom/tests/dom007.phpt] 您可能已经发现了 PHP 中的问题。
我感谢任何有关如何开始readline工作的帮助!
我们知道,通过命令set -o vi和将 Readline 模式更改为 vi 后set editing-mod vi,按 键v可以进入临时文件来编辑命令(这里有更多详细信息)。我想禁用该功能。
我试图v在 ~/.inputrc 中重新映射喜欢:
"v":
Run Code Online (Sandbox Code Playgroud)
但是字符 v不能输入,即使在插入模式下(vim也不能输入。=.=!)。
我应该怎么做?以及如何重新映射快捷键并且不影响针对 VI 编辑模式的输入模式?
从另一个命令行驱动的软件中,我习惯了以下行为:向上/向下箭头浏览命令历史记录,匹配与当前行中输入的字符匹配的行,Esc 删除到目前为止输入的所有内容在当前行。我试图让 bash(通过 readline)做同样的事情。这是我放入 .bashrc 的内容:
bind 'Escape: kill-whole-line'
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
Run Code Online (Sandbox Code Playgroud)
由于 Escape="\e" 的映射与转义序列 "\e[A" 和 "\e[B" 的映射的干扰,行为不符合预期。
我的问题:有没有办法使这项工作?一种可能性是基于时间的,即如果 \e 后面紧跟着另一个键,则它被视为序列的一部分,但如果在一些短暂的延迟期间没有其他任何东西出现,则它本身被视为一个键。然而,阅读 bash 和 readline 文档我无法想出这样的事情。
附带问题:是否有一个现代终端“模拟器”实际上并不试图模拟历史机器的复杂行为,而是为在其中运行的程序提供有关按下的键的明确信息?这也将启用诸如区分 CTRL-A 和 CTRL-SHIFT-A 之类的东西......我在 KDE 的 Konsole(其行为类似于 xterm)和 Linux 控制台上测试了这些东西。
我正在更新我的 mac 上的一些程序,突然在运行 gnuplot 时遇到了一些麻烦。错误是这样的:
dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
Referenced from: .../something/...
Reason: image not found
Trace/BPT trap: 5
Run Code Online (Sandbox Code Playgroud)
这不是我自己的错误(我从互联网上复制粘贴了这个非常接近的错误),因为从那时起我卸载了 gnuplot 并且无法再安装它。
当我运行时brew install gnuplot,我得到:
Warning: You are using macOS 10.11.
We (and Apple) do not provide support for this old version.
You will encounter build failures with some formulae.
Please create pull requests instead of asking for help on Homebrew's GitHub,
Discourse, Twitter or IRC. You are responsible for resolving any issues you experience, as you …Run Code Online (Sandbox Code Playgroud) 在 bash 中,您可以使用 Mf 和 Mb 将光标向前和向后移动一个单词,但是有没有办法向前或向后移动一个参数?如果不是开箱即用,也许是通过某种配置?
换句话说,我想光标在下面标记的位置之间导航。
cp "foo bar.txt" "/tmp/directory with space"
^ ^ ^
| | |
Run Code Online (Sandbox Code Playgroud)