标签: inputrc

在 bash 的 vi 模式下恢复最后一个命令的最后一个参数

使用bash的vi模式(set -o vi)时,是否可以恢复上次执行命令的最后一个参数?这是在 emacs 模式下用ESC+ 完成的.,我也想在 vi 模式下完成。

我知道 bash 提供了!$and $_,但它们没有扩展,我发现直接使用它们很危险。

我已经尝试过(但没有成功)我在 Stack Overflow 上找到的一些关于编辑.inputrc和添加的解决方案:

set editing-mode vi
set keymap vi-insert
"\e.": yank-last-arg
"\e_": yank-last-arg
Run Code Online (Sandbox Code Playgroud)

我正在 bash 中切换到 vi 模式,但我已经习惯了ESC+.并且能够使用它或找到快速简便的替代品会很好。

编辑:此问题已被标记为类似问题的重复,该问题询问如何使用 Alt+S 恢复最后一个参数。我专门询问有关 ESC+ 的问题。(这是我习惯的快捷方式,其他答案未涵盖)。

编辑:补充@chaos 的解决方案:以下绑定使 ESC+。(好吧,真的是 '.')粘贴最后一个参数,但是你失去了 Vi 的点 (.) 功能:

bind -m vi-command ".":insert-last-argument
Run Code Online (Sandbox Code Playgroud)

bash inputrc

6
推荐指数
2
解决办法
982
查看次数

如何将 alt 退格键映射到 .inputrc 中的某些命令?

有谁知道如何在 inputrc 中将组合键与 Alt 绑定?

我想将组合键Alt+映射Backspacebackward-kill-word,但是当我按Ctrl+VAlt+Backspace查看它代表的字符时,它会^[在被删除之前显示一小会儿,或者根本不显示任何内容。

我知道为了将Ctrl+绑定Left Arrow到某些东西,我可以按Ctrl+ V,它将键入^[[1;5C然后替换^[\e,最后写入将此行添加到.inputrc

"\e[1;5C": forward-word
Run Code Online (Sandbox Code Playgroud)

但这个方法对我来说不起作用Alt+ (literally anything)

inputrc

6
推荐指数
1
解决办法
1169
查看次数

如何以人类可读的形式打印键盘快捷键?

拥有一种用户友好的方式来概览当前定义的键盘快捷键将非常有用。换句话说,给定这些/etc/inputrc

"\e[A": history-search-backward
"\e[11~": backward-word
Run Code Online (Sandbox Code Playgroud)

~/.inputrc线

"\e[A": kill-word
"\e\eOD": backward-word
Run Code Online (Sandbox Code Playgroud)

没有必要通过两个文件来找出\e[A已被覆盖的文件,有两个替代快捷方式 for backward-word,这\e\eOD意味着......无论它意味着什么,这kill-word实际上意味着删除到当前(或下)字。理想的解决方案是打印类似的东西

Delete until next word boundary: Meta-A
Go to the previous word boundary: F1; Ctrl-Left
Search history backwards: Meta-Up
Run Code Online (Sandbox Code Playgroud)

(希望对转义序列有更好理解的人可以修复快捷方式。)

有没有 Linux 程序来打印这个?

我猜这样的程序可能是操作系统、内核,甚至是键盘相关的,所以它可能需要大量配置(例如,一个程序通过轮询用户showkeyxev按其他键来确定真正发送了哪些转义序列) ),但这对于最终了解如何有效使用终端快捷方式来说是一个可以接受的价格。

keyboard-shortcuts readline inputrc

5
推荐指数
1
解决办法
476
查看次数

将 menu-complete 和 dynamic-complete-history 分配给 TAB

有没有办法让我将 menu-complete 和 dynamic-complete-history 分配给Tab(或一个到Tab另一个到Tab- Tab.inputrc

我在想可能有一种方法来设置一个函数并使用 COMPREPLY,但我不知道如何。

我想要做的是第一次按下标签时使用“动态完整历史”,如果再次按下标签,则使用“菜单完成”。

bash autocomplete readline inputrc

5
推荐指数
1
解决办法
555
查看次数

通过 .inputrc 将 Ci 和 TAB 键绑定到终端应用程序中的不同命令

为了什么我都试过了,TAB并且C-i在.inputrc文件似乎意味着同样的事情,无论我绑定到一个绑定到其他。我知道最初是一样的,而且这种行为是从旧时代继承下来的,但是现在,除了终端仿真器之外,所有 X 应用程序都使 aC-iTABpress有所不同。

那么有没有办法在我按下TAB键时运行终端命令(例如“完成”)并在按下时运行另一个命令C-i

(同样的问题适用于C-mand ENTER, C-z, C-d,以及我想通过原始绑定以外的其他方式发送的所有这些控制序列,并将我自己的命令应用于这些宝贵的键绑定)

顺便说一句,如果你能解释一下从按键到 shell 解释的过程,这将有助于我理解。现在我明白键盘事件由 Xmodmap 翻译,然后由 .inputrc 翻译,结果由 shell 或类似的东西解释。

我目前使用 Guake,有时使用 gnome-terminal 作为终端模拟器。

按照评论中提出的链接后,终端模拟器似乎是将TABkeysym 从 X 服务器转换为 的链的元素C-i,并将其发送到 bash shell,因为它不理解诸如TAB,ENTER和兄弟姐妹之类的东西。因此,在终端模拟器之后和 bash shell 之前,配置 readline 本身将不起作用。问题可以这样精确:如何配置我的终端模拟器,以便将TABand C-iENTERandC-m等转换为不同的字符序列对?也许制作TABENTER发送一个新的自定义转义序列,稍后可以在 .inputrc 中映射到原始命令,最后能够使用C-iC-m用于其他目的。或者离开TABENTER …

bash terminal-emulator terminal inputrc

5
推荐指数
1
解决办法
1820
查看次数

inputrc 中的 if 语句

我为我的 bashrc 使用一个中心位置,并为我的所有用户提供这样的源:

GLOBAL_BASHRC="/path/to/global/bashrc"

if [ -r "$GLOBAL_BASHRC" -a -f "$GLOBAL_BASHRC" ]; then
    # Load the bashrc
    source $GLOBAL_BASHRC
else
    echo "Warning: Bashrc file [${GLOBAL_BASHRC}] does not exist!"
fi
Run Code Online (Sandbox Code Playgroud)

现在我想对我的 inputrc 文件做同样的事情。我已经从这个问题中找到了如何在 inputrc 中执行等效于 source 的操作:

$include /path/to/global/inputrc
Run Code Online (Sandbox Code Playgroud)

但问题是,就像在上面的 bashrc 中一样,我想要一些错误处理,我只想加载实际存在的文件。因此,我的问题是,如何指定 if 语句检查输入文件中是否存在文件?

readline inputrc

5
推荐指数
1
解决办法
546
查看次数

让 zsh 使用 readline 而不是 zle?

有没有办法使用zsh阅读readline/etc/inputrc不是~/.inputrc模块zle

我将命令行键绑定保留为inputrc全局应用到所有其他使用它的“shell” sqlite,例如mysql等。

我认为zsh应该兼容bash并提供这样的选择。

shell bash zsh readline inputrc

5
推荐指数
1
解决办法
4214
查看次数

从 inputrc 取消绑定默认密钥

我想要做的是让 Ch 不发送向后删除字符

我的 inputrc 文件中没有任何相关内容,但显示在 bind -p 中

bash keyboard-shortcuts readline inputrc

5
推荐指数
1
解决办法
1705
查看次数

如何以 .inputrc 格式打印按键?

我可以使用哪个应用程序来确定在 .inputrc 中为任何自定义键盘快捷键放置什么?我尝试了一些,但似乎没有一个可用:

showkeyshowkey -aread只是打印'如果按Ctrl- '

xev 分别打印它们,并且不打印任何似乎可用于 .inputrc 的内容。

keyboard-shortcuts keyboard inputrc

4
推荐指数
2
解决办法
1840
查看次数

在 inputrc 中绑定 Ctrl-\?

我一直在纠结这个,似乎无法让它发挥作用。在终端中使用Ctrl+V正确输出^\此组合,因此它应该是可识别的。

由于我Ctrl+\绑定到 emacs 中的暂停帧,我希望能够通过再次按下Ctrl+快速回到前台\

我相信这是唯一可行的组合:

"\C-\\": "fg\n"
Run Code Online (Sandbox Code Playgroud)

如果我EnterCtrl+之后点击V这个组合,我会得到以下输出,这可能很有用:

bash: $'\034': command not found
Run Code Online (Sandbox Code Playgroud)

bash terminal inputrc

3
推荐指数
1
解决办法
1779
查看次数