标签: inputrc

在没有键绑定的情况下执行 readline 函数?

我只是在阅读 readline 手册页,发现了一堆我不知道的很棒的命令。但是,有几个没有默认的键绑定。有没有办法从 shell 执行未绑定的命令?

我不是在问如何在 ~/.inputrc 中绑定命令,而是如何从 shell 或 bash 脚本中“一次性”执行它。

例如,“转储变量”命令。是否有一些命令我可以提供“转储变量”作为参数来执行它?

shell bash readline inputrc

31
推荐指数
1
解决办法
2540
查看次数

.bashrc 和 .inputrc 有什么区别

我是新来的UNIX系统,并且发现很有意思的设定文件来创建自定义的功能和配置像.bashrc.inputrc

但是,我不明白两者之间的区别。例如,当我创建别名时,我将它们放在.bashrc.

Example 1: alias ...='cd ../../'
Run Code Online (Sandbox Code Playgroud)

当我创建诸如使用箭头键查找上一个或下一个命令之类的操作时,我将命令放在.inputrc.

Example 2: "\e[A": history-search-backward
Run Code Online (Sandbox Code Playgroud)

为什么我需要将它们放在不同的设置文件中?我如何区分什么时候什么地方?

先感谢您!

bash shell-script bashrc inputrc

23
推荐指数
1
解决办法
1万
查看次数

像在 Emacs 中一样在 Bash 中复制和设置标记?

我希望能够使用 Emacs 默认使用的相同键盘绑定(即使用C-spacefor set-markM-w复制文本、C-yM-y粘贴它等)在 Bash 的命令行中复制和粘贴文本。

GNU Bash的文件说,猛砸附带了一些默认设置了这些键绑定。

例如,yanking ( C-y) 默认在我的终端上工作。但是,我无法使set-markcopy命令起作用,并且默认情况下它们似乎没有绑定到任何键。

通常,用户定义自己的键绑定的方式是将它们添加到.inputrc. 所以我在文档中查看并发现了以下 bash 函数,我认为这些函数可以帮助我定义我想要的类似 Emacs 的行为(即set-markwithC-spacecopywith M-w)。

copy-region-as-kill ()
Run Code Online (Sandbox Code Playgroud)

将区域中的文本复制到终止缓冲区,以便立即将其拉出。默认情况下,此命令是未绑定的。

set-mark (C-@)
Run Code Online (Sandbox Code Playgroud)

将标记设置为点。如果提供了数字参数,则标记设置为该位置。

如果我理解正确的话,上面的意思copy-region-as-kill是默认情况下不绑定到任何键盘序列,而默认情况下set-mark绑定到C-@

C-@在我的终端上试过,但我认为它没有运行,set-mark因为当我移动光标时我没有看到任何突出显示的文本。无论如何,我尝试将键盘绑定(M-wC-)添加到my 中的函数 copy-region-as-killset-mark以上.inputrc,然后使用 重新加载它C-x C-r,但这不起作用。我知道我的其他条目正在.inputrc工作,因为我在其中定义了其他用户定义的键绑定。 …

bash line-editor inputrc

17
推荐指数
1
解决办法
3133
查看次数

如何调用“子”.inputrc?(就像在 .bashrc 中一样,您可以在其中“获取 sub_script.sh”)

我的只~/.bashrc包含一行:

source my_config/my_actual_bashrc.sh
Run Code Online (Sandbox Code Playgroud)

是否有等价的.inputrc,所以我的自定义可以在一个单独的位置,并“调用” ~/.inputrc

bash bashrc inputrc

17
推荐指数
3
解决办法
2483
查看次数

我可以使clear命令的行为类似于Bash中的Ctrl-L吗?

看来clear和 bash Ctrl-L是有很大不同的;clear完全删除以前的所有终端信息(因此您无法向上滚动) while Ctrl-L只是滚动屏幕,使光标位于页面顶部,以便您仍然可以向上滚动并查看以前的信息。我更喜欢Ctrl-L系统。有没有办法覆盖,clear以便它执行Ctrl-L而不是擦除所有以前的终端信息?这不是一个大问题,但我只是出于好奇而想知道是否有一种方法可以使用别名clear来指向我喜欢的Ctrl功能L

顺便说一句,我刚刚注意到 PowerShell 也有一个绑定Ctrl-并且它的执行方式与-在 bash 上L相同;看起来 PowerShell 设计者从 bash 中借鉴了很多,而控制台没有这个功能。CtrlLcmd.exe

bash terminal inputrc

15
推荐指数
1
解决办法
6920
查看次数

删除当前 bash 命令行中的整个参数

使用^W(unix-word-rubout) 我可以轻松地从 bash shell 的当前命令中删除单个“单词”。

但是,当处理包含空格的引用参数(或包含反斜杠转义空格的未引用参数)时,这不会很好地工作,因为它只删除一个单词而不是整个参数。

所以我正在寻找一种删除整个论点的方法。

示例(光标总是在最后):

$ foo --bar "foo bar" meow
[black magic]
$ foo --bar "foo bar"
[black magic]
$ foo --bar
[black magic]
$ foo
Run Code Online (Sandbox Code Playgroud)

bash readline inputrc

14
推荐指数
1
解决办法
1万
查看次数

.inputrc 与 .bashrc 设置

我注意到.bashrc.inputrc文件中的一些设置看起来相同或相似,例如:

shopt -s nocaseglob对比set completion-ignore-case
export HISTSIZE对比set history-size
export HISTFILESIZE对比set history-size

.inputrc设置是否也会影响 python shell 中的完成和历史大小(如果在终端内运行)?

HISTSIZE通过限制history-size或它覆盖它?

bashrc inputrc

9
推荐指数
1
解决办法
1175
查看次数

tmux 选项`xterm-keys` 不启用控制+箭头

我无法让 tmux 识别Ctrl-Left-arrow序列与左箭头不同,右箭头也相同。在我的 中~/.inputrc,我已经映射了这些序列(由 2 个不同的终端模拟器发出,即 putty 和 mobaxterm)以跳过命令行中的单词:

"\eOD": backward-word
"\e[1;5D": backward-word
Run Code Online (Sandbox Code Playgroud)

这在 ssh 会话中工作得很好,但是 screen 和 tmux 都不区分箭头和控制箭头。自然,推荐的解决方案是通过将全局选项添加到 tmux 中启用选项 xterm-keys ~/.tmux.conf,并且有直接证据(除了对上述解决方案的“感谢”评论)这对其他人有效。但对我来说,Ctrl-Left-arrow发送相同的代码,ESC DLeft-arrow

我已经确认该选项确实是通过检查 tmux 选项设置的

:show-window-options -g
Run Code Online (Sandbox Code Playgroud)

甚至手动设置它以防万一当前窗口

:set-window-option xterm-keys on
Run Code Online (Sandbox Code Playgroud)

但这一切都无济于事。tmux 报告版本号为 1.8,带有tmux -V.

我还可以检查什么来解决此问题?

tmux inputrc

8
推荐指数
1
解决办法
4052
查看次数

Bash 将国际字符显示为转义序列

当我在 bash 命令行中按下某些键(例如德语变音符号)时,我会得到转义序列。例如,ß给我\303. 这些转义序列被视为单个字符,因此一个退格键会删除整个序列。该字符只是在命令行上显示错误,但它被正确解释,例如键入echo ß给出:

$ echo \303
ß
Run Code Online (Sandbox Code Playgroud)

我猜它有非 7 位 ASCII 字符的问题。然而,在其他所有地方,这些都可以正常工作。我可以在 vim 中使用它们或用 cat 显示它们,而且 unicode 字符也可以正常工作。

如何让 bash 正确显示这些字符?


作为记录,

TERM=xterm-256color
LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

从我的.inputrc:

set input-meta on      # Enable Meta input with eighth bit set
set meta-flag on       # Synonym for the above
set convert-meta off   # Do NOT strip the eighth bit
set output-meta on     # Enable Meta output with eighth bit set
Run Code Online (Sandbox Code Playgroud)

输出 stty -a

speed 38400 baud; rows …
Run Code Online (Sandbox Code Playgroud)

bash readline inputrc

7
推荐指数
2
解决办法
1539
查看次数

在 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
查看次数

标签 统计

inputrc ×10

bash ×8

bashrc ×3

readline ×3

line-editor ×1

shell ×1

shell-script ×1

terminal ×1

tmux ×1