Hexagon GDB Debugger介绍(52)

240 篇文章 11 订阅

5.4.3 Readline init file

虽然 Readline 库默认安装了一套类似 Emacs 的键绑定,但也可以使用不同的键绑定。任何用户都可以通过把命令放在 inputrc 文件中来定制使用 Readline 的程序,这个文件通常在他的主目录中。这个文件的名称取自环境变量INPUTRC的值。如果该变量没有设置,默认为 ~/.inputrc。
当一个使用Readline库的程序启动时,init文件会被读取,并设置键的绑定。
此外,Ctrl-x Ctrl-r命令会重新读取这个init文件,从而纳入你可能对它所作的任何修改。

5.4.3.1 Readline init file syntax

Readline init文件中只允许有一些基本的结构。空白行被忽略。以#开头的行是注释。以$开头的行表示条件结构(第5.4.3.2节)。其他行表示变量设置和键绑定。
Variable settings
你可以通过使用 init 文件中的 set 命令改变 Readline 中的变量值来修改 Readline 的运行时行为。语法很简单:

set variable value

例如,这里是如何从默认的类似Emacs的键绑定改变为使用vi
行编辑命令:

set editing-mode vi

变量的名称和值,在适当的情况下,不考虑大小写而被识别。不被识别的变量名会被忽略。
布尔变量(那些可以被设置为开或关的变量)如果值为空或空,开(不区分大小写),或1,则被设置为开。任何其他的值都会导致该变量被设置为关闭。
大量的运行时行为是可以通过以下变量改变的。
bell-style
控制当Readline想响起终端铃声时的情况。如果设置为无,Readline就不会响铃。如果设置为可见,Readline会使用一个可见的铃声,如果有的话。如果设置为有声(默认),Readline会尝试响起终端的铃声。
bind-tty-special-chars
如果设置为on,Readline试图将内核的终端驱动特别处理的控制字符与它们的Readline等价物结合起来。
comment-begin
在执行insert-comment命令时,要在行首插入的字符串。默认值是 “#”。
completion-ignore-case
如果设置为on,Readline会以不区分大小写的方式进行文件名匹配和完成。默认值是关闭。
completion-query-items
可能完成的数量,它决定了当用户被问及是否应该显示可能性列表时。如果可能的完成数大于这个值,Readline将询问用户是否要查看它们;否则,它们将被简单列出。这个变量必须设置为大于或等于0的整数,负值意味着Readline不应该询问。默认限制是100。
convert-meta
如果设置为开,Readline将把设置了第八位的字符转换为ASCII密钥序列,即剥离第八位并加上一个ESC字符的前缀,将其转换为一个元固定的密钥序列。默认值是开。
disable-completion
如果设置为On,Readline将抑制字的完成。完成字将被插入行中,就像它们被映射为自我插入一样。默认是关闭。
editing-mode
编辑模式变量控制使用哪一组默认的键绑定。默认情况下,Readline 在 Emacs 编辑模式下启动,那里的按键与 Emacs 最相似。这个变量可以设置为emacs或vi。
enable-keypad
当设置为开时,Readline在被调用时将尝试启用应用程序的小键盘。有些系统需要这样做来启用方向键。默认是关闭。
expand-tilde
如果设置为开,当Readline试图完成字的时候,会进行tilde扩展。默认是关闭。
history-preserve-point
如果设置为开,历史代码会尝试将点放在用上一个历史或下一个历史检索的每个历史行的相同位置上。默认是关闭。
horizontal-scroll-mode
这个变量可以被设置为开或关。设置为on意味着当被编辑的行长于屏幕的宽度时,将在一个屏幕行上水平滚动,而不是包裹到一个新的屏幕行。默认情况下,这个变量被设置为关闭。
input-meta
如果设置为开,Readline将启用八位输入(它不会清除它所读取的字符中的第八位),不管终端声称它能支持什么。默认值是关闭。meta-flag这个名字是这个变量的一个同义词。
isearch-terminators
终止增量搜索的字符串,随后不会将该字符作为命令执行(第 5.4.2.5 节)。如果这个变量没有被赋予一个值,那么字符ESC和Ctrl-J将终止增量搜索。
keymap
设置Readline对当前键盘绑定命令的键盘图的想法。可接受的键位图名称是emacs、emacs-standard、emacs-meta、emacs-ctlx、vi、vi-move、vi-command和vi-insert。vi相当于vi-command;emacs相当于emacs-standard。默认值是emacs。编辑模式变量的值也会影响到默认的键盘图。
mark-directories
如果设置为开,完成的目录名称会附加一个斜线。默认为开。
mark-modified-lines
这个变量,当设置为on时,会使Readline在被修改的历史行的开头显示一个星号(*)。这个变量默认是关闭的。

mark-symlinked-directories
如果设置为 “开”,作为目录的符号链接的完成名称会附加一个斜线(取决于mark-directories的值)。默认是关闭。
match-hidden-files
这个变量设置为 on 时,会使 Readline 在进行文件名补全时匹配文件名以 .开头的文件(隐藏文件),除非用户在要补全的文件名中提供了前面的 .。这个变量默认为开。
output-meta
如果设置为on,Readline将直接显示设置了第八位的字符,而不是作为元预设的转义序列。默认是关闭。
page-completions
如果设置为 “开”,Readline就会使用一个内部的类似寻呼机的东西来显示一次可能完成的屏幕。这个变量在默认情况下是打开的。
print-completions-horizontally
如果设置为 “开”,Readline将以水平方向按字母顺序排列的匹配来显示完成度,而不是在屏幕下方。默认是关闭。
show-all-if-ambiguous
这改变了完成函数的默认行为。如果设置为 “开”,有一个以上可能完成的词会立即列出匹配的词,而不是敲钟。默认值是关闭。
show-all-if-unmodified
这改变了完成函数的默认行为,其方式类似于show-all-if-ambiguous。如果设置为 “开”,有一个以上的可能完成词而没有任何可能的部分完成词(可能的完成词不共享一个共同的前缀)会导致匹配的词被立即列出,而不是敲钟。默认值是关闭。
visible-stats
如果设置为开,在列出可能的完成度时,表示文件类型的字符会附加到文件名上。默认是关闭。
Key bindings
在init文件中控制键绑定的语法很简单。首先,你需要找到你想改变的命令的名称。下面几节包含了命令名称、默认键绑定(如果有的话)和命令作用的简短描述的表格。
一旦你知道了命令的名称,只需在init文件中的一行中放入你想绑定的键的名称,一个冒号,然后是命令的名称。键的名称可以用不同的方式表达,取决于你觉得最舒服的方式。
除了命令名称外,readline还允许将按键绑定到一个字符串上,这个字符串在按键时被插入(一个宏)。

keyname: function-name or macro

keyname是用英文拼出的键的名称。例如:

Control-u: universal-argument
   Meta-Rubout: backward-kill-word
   Control-o: "> output"

在上面的例子中,Ctrl-u与函数universal-argument绑定,M-DEL与函数backward-kill-word绑定,Ctrl-o与运行右侧表达的宏绑定(也就是在行中插入文本"> output")。
在处理这种键绑定语法时,可以识别一些符号性的字符名称。DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, 和 TAB。


"keyseq": function-name or macro

keyseq与上面的keyname不同的是,可以指定表示整个按键序列的字符串,方法是将按键序列放在双引号中。一些GNU Emacs风格的键转义可以被使用,如下面的例子,但特殊字符的名称不被识别。

"\C-u": universal-argument
   "\C-x\C-r": re-read-init-file
   "\e[11~": "Function Key 1"

在上面的例子中,Ctrl-u再次与函数universal-argument绑定(就像在第一个例子中一样),Ctrl-x Ctrl-r与函数re-read-init- file绑定,而ESC [ 1 1 ~则与插入文本Function Key 1绑定。
在指定按键序列时,以下GNU Emacs风格的转义序列是可用的:

\C- control prefix
\M- meta prefix
\e an escape character
\\ backslash
\" ", a double quotation mark
\' ', a single quote or apostrophe

除了GNU Emacs风格的转义序列外,还有第二套反斜杠转义可用:

\a alert (bell)
\b backspace
\d delete
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\nnn the eight-bit character whose value is the octal value nnn (one to three digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

在输入宏的文本时,必须使用单引号或双引号来表示宏的定义。未加引号的文本被认为是一个函数名称。在宏的正文中,上述反斜杠转义被展开。反斜杠将引用宏文本中的任何其他字符,包括 "和’。例如,下面的绑定将使Ctrl-x/插入le/intotheline:

"\C-x\\": "\\"
5.4.3.2 Conditional init constructs

Readline实现了一个类似于C预处理器的条件编译功能的设施,它允许在测试结果中进行键绑定和变量设置。有四个解析器指令被使用。
$if
$if结构允许根据编辑模式、正在使用的终端或使用Readline的应用程序来进行绑定。测 试的文本延伸到行尾;不需要任何字符来隔离它。
mode
$if 指令的 mode= 形式用于测试 Readline 是处于 emacs 还是 vi 模式。这可以
与 set keymap 命令一起使用,例如,只有当 Readline 在 emacs 模式下启动时,才能在 emacs-standard 和 emacs-ctlx keymaps 中设置绑定。
term
term=形式可以用来包括终端特定的键绑定,也许是绑定终端功能键输出的键序。
终端的功能键输出。在=右边的词是针对终端的全名和终端名称中第一个-之前的部分进行测试的。例如,这允许sun同时匹配sun和sun-cmd。
application
应用程序结构用于包括应用程序的特定设置。每个使用Readline库的程序
库的每个程序都会设置应用程序名称,你可以测试一个特定的值。这可以用来将按键序列与对特定程序有用的功能绑定。例如,下面的命令添加了一个按键序列,在Bash中引出当前或前一个单词。

$if Bash
                 # Quote the current or previous word
                 "\C-xq": "\eb\"\ef\""
                 $endif

$endif

从上一个例子中可以看出,这条命令终止了一条$if命令。

$else

如果测试失败,$if指令的这个分支的命令将被执行。

$include

这条指令以一个文件名作为参数,从该文件中读取命令和绑定。例如,下面这条指令从/etc/inputrc:
      $include /etc/inputrc
5.4.3.3 Sample init file

下面是一个inputrc文件的例子。这说明了键绑定、变量分配和条件语法:

# This file controls the behaviour of line input editing for
   # programs that use the GNU Readline library.  Existing
   # programs include FTP, Bash, and GDB.
   #
   # You can re-read the inputrc file with Ctrl-x Ctrl-r.
   # Lines beginning with '#' are comments.
   #
   # First, include any systemwide bindings and variable
   # assignments from /etc/Inputrc
   $include /etc/Inputrc
   #
   # Set various bindings for emacs mode.
   set editing-mode emacs
   $if mode=emacs
   Meta-Control-h:backward-kill-wordText after the function name is
   ignored
#
# Arrow keys in keypad mode
#
#"\M-OD":
#"\M-OC":
#"\M-OA":
#"\M-OB":
#
# Arrow keys in ANSI mode
#
"\M-[D":
"\M-[C":
"\M-[A":
"\M-[B":
#
# Arrow keys in 8 bit keypad mode
#
#"\M-\C-OD":
#"\M-\C-OC":
#"\M-\C-OA":
#"\M-\C-OB":
#
# Arrow keys in 8 bit ANSI mode
#
#"\M-\C-[D":
#"\M-\C-[C":
#"\M-\C-[A":
#"\M-\C-[B":
C-q: quoted-insert
$endif
# An old-style binding.  This happens to be the default.
TAB: complete
# Macros that are convenient for shell interaction
$if Bash
# edit the path
"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
# prepare to type a quoted word --
# insert open and close double quotes
# and move to just after the open quote
"\C-x\"": "\"\"\C-b"
# insert a backslash (testing backslash escapes
# in sequences and macros)
"\C-x\\": "\\"
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
# Add a binding to refresh the line, which is unbound
"\C-xr": redraw-current-line
# Edit variable on current line.
"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
$endif
# use a visible bell if one is available
set bell-style visible
# don't strip characters to 7 bits when reading
set input-meta on
# allow iso-latin1 characters to be inserted rather
# than converted to prefix-meta sequences
set convert-meta off
# display characters with the eighth bit set directly
# rather than as meta-prefixed characters
set output-meta on
# if there are more than 150 possible completions for
# a word, ask the user if he wants to see all of them
set completion-query-items 150
# For FTP
$if Ftp
"\C-xg": "get \M-?"
"\C-xt": "put \M-?"
"\M-.": yank-last-arg
$endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值