31 Command Line Editing

本章介绍gnu命令行编辑界面的基本功能。            

31.1线编辑简介   

以下段落描述了用于表示按键的符号。         

文本C- k读作“Control-K”,描述了按住Control键同时按下K键时产生的字符。                      

textM-k被读作‘Meta-K’,描述了当按下Me ta键(如果你有此键)并同时按下K键时产生的字符。许多键盘上的Me ta键被标记为ALT。在有两个标记为ALT的键的键盘上(通常位于空格键两侧),左侧的ALT键通常设置为作为Me ta键使用。右侧的ALT键也可以配置为Me ta键,或者配置为其他修饰键,例如用于输入重音字符的组合键。                        

如果您没有Meta或ALT键,或者没有另一个作为Meta键工作的键,则可以通过先键入ESC,然后键入K来生成相同的按键组合。这两种方法都称为将K键元化。                                  

文本M-C- k读作“Meta-Control-k”,描述了通过元化C-k产生的字符。             

此外,几个键都有自己的名称。具体来说,D EL、ESC、LFD、SPC、RET和TAB在此文本中或在init文件中都代表它们自己(请参见第31.3节[Readline init File],第368页   )。如果键盘缺少LFD键,则按C-J键可产生所需的字符。RET键可能标为返回或进入                        

一些键盘。 

31.2读线交互 

在交互式会话中,你常常输入一行长文本,却发现自己输入的第一个词拼错了。Readline库提供了一系列命令,让你在输入时可以调整文本,只需修正拼写错误,而无需重新输入大部分内容。使用这些编辑命令,你可以将光标移动到需要更正的位置,删除或插入需要修正的文本。当对这行文本满意后,只需按回车键即可。你不必到达行尾才能按回车;无论行的位置如何,整个行都会被接受。                                                                                                              

行内的游标。   

31.2.1 Readline简单必备  

要将字符输入到行中,只需键入它们。键入的字符将出现在光标所在的位置,然后光标向右移动一个空格。如果键入错误的字符,可以使用擦除字符来回退并删除该错误的字符。                                             

有时,您可能会误键入一个字符,直到输入了几个其他字符后才注意到这个错误。在这种情况下,您可以按C-b将光标移到左边,然后纠正您的错误。之后,您可以使用C-f将光标移到右边。                                              

在行中间添加文本时,您会注意到光标右侧的字符被“推移”以腾出空间来插入文本。同样地,   

当您删除光标后面的文本时,光标右侧的字符会被“拉回”以填补因删除文本而留下的空白。下面列出了编辑输入行文本的基本要素。                                        

C-b向后移动一个字符。   

C- f向前移动一个字符。DEL或BACKSPACE                   

删除光标左侧的字符。       

C-d删除光标下方的字符。     

打印字符 

将字符插入到cursor.C-_或C-xC-u行中            

撤销上一个编辑命令。您可以一直撤销到空白行。             

(根据您的配置,退格键应设置为删除光标左侧的字符,DEL键应设置为删除光标下方的字符,                             

类似于C-d,而不是光标左侧的字符。)           

31.2.2读行移动命令  

上表描述了编辑输入行时需要的最基本的按键。为了方便起见,除了C-b、C-f、C-d和DEL之外,还添加了许多其他命令。以下是一些用于快速移动行中的命令。                                        

C-移动到队列的起始位置。                   

C-e移动到队列的末尾。     

M-f向前移动一个单词,其中单词由字母和数字组成。           

M-b向后移动一个单词。   

C- l清屏,重新打印当前行的顶部。                      

注意C- f向前移动一个字符,而M- f向前移动一个单词。控制键击操作字符,而元键击操作单词,这是一个松散的约定。                          

31.2.3读行终止命令  

“杀死”文本意味着从行中删除文本,但将其保存起来以备后用,通常通过将其拉回(重新插入)到行中。(“剪切”和“粘贴”是“杀死”和“拉回”的较新术语。)                           

如果命令的说明说它会“杀死”文本,那么您可以确定您可以在稍后在不同的(或相同的)位置中恢复文本。                             

使用kill命令时,文本会被保存在kill- ring中。连续多次使用kill命令可以将所有被杀死的文本一起保存起来,这样当你回撤时,就能全部恢复。kill- ring不区分行;之前输入的某一行中被杀死的文本可以在后续输入新行时再次回撤。                                                              

以下是用于删除文本的命令列表。   

C- k从当前光标位置删除到行尾的文本。                          

M- d从光标到当前单词的末尾,或者从单词之间到下一个单词的末尾。word边界与M-f使用的边界相同。                                          

从光标处的当前单词起始位置,或在单词之间,到                        

上一个单词的起始位置。单词边界与M-b使用的相同。               

C- w从光标到上一个空格键。这与M- DEL不同                          

因为“bound”和“aries”是不同的词。    

下面是将文本拉回行中的方法。拉回是指从千字缓冲区中复制最近被杀文本。                    

将最近被删除的文本重新插入到光标处的缓冲区中。                         

m-旋转杀环,然后y拉出新的顶部。只有在先前                           

命令是c-y或m-y。   

31.2.4读行参数 

可以将数字参数传递给Readline命令。有时参数充当重复计数器,有时参数的符号才是重要的。如果向通常向前操作的命令传递负数参数,该命令将向后操作。例如,要将文本回滚到行首,可以键入‘M--C-k’。                                                                   

传递数字参数给命令的一般方法是在命令前输入元数字。如果第一个输入的数字是减号(‘-’),则参数的符号将是负号。一旦你输入了一个元数字以开始参数,就可以继续输入剩余的数字,然后执行命令。例如,要给C-d命令提供一个参数1 0,你可以输入‘M-1 0C-d’,这将删除输入行上的接下来十个字符。                                                                                

31.2.5在历史记录中搜索命令     

Readline提供了用于搜索命令历史中包含指定字符串的行的命令。有两种搜索模式:递增和非递增。           

增量搜索在用户尚未完成输入搜索字符串之前就开始了。每当输入一个字符时,Readline会显示历史记录中与已输入字符串匹配的下一个条目。增量搜索只需要找到所需的历史记录条目所需的字符数。要向后搜索历史记录中的特定字符串,请输入C-r。输入C- s则会向前搜索历史记录。此搜索终止符变量中的字符用于终止增量搜索。如果该变量未被赋值,ESC和C-J字符将终止增量搜索。C-g将中止增量搜索并恢复原始行。当搜索终止时,包含搜索字符串的历史记录条目将成为当前行。                                                                                                    

要查找历史列表中的其他匹配条目,请根据需要键入C-r或C-s。这将在历史列表中向后或向前搜索与已键入的搜索字符串匹配的下一个条目。任何绑定到Readline命令的其他键序列都将终止    

搜索并执行该命令。例如,RET将终止搜索并接受该行,从而从历史列表中执行该命令。移动命令将终止搜索,使找到的最后一行成为当前行,并开始编辑。                         

Readline会记住上一次增量搜索字符串。如果在没有任何中间字符定义新搜索字符串的情况下键入两个C-,则使用任何已记住的搜索字符串。                         

非递增搜索在开始搜索匹配的历史行之前,会读取整个搜索字符串。搜索字符串可以由用户键入,也可以是当前行内容的一部分。                     

31.3读取行启动文件  

虽然Readline库默认安装了一套类似Emacs的键绑定,但也可以使用不同的键绑定集。任何用户都可以通过在输入rc文件中放置命令来自定义使用Readline的程序,该文件通常位于用户的主目录下。此文件的名称取自环境变量inputrc的值。如果该变量未设置,默认值为‘~/inputrc’。                                        

当使用Readline库的程序启动时,将读取init文件,并设置键绑定。                   

此外,C-xC-rcommand会重新读取此init文件,因此会将您可能对其所做的任何更改纳入其中。              

31.3.1读取行启动文件语法   

Readline init文件中只允许使用几个基本构造。忽略空白行。以“#”开头的行是注释。以“$”开头的行表示条件构造(参见第373页第31.3.2[条件初始化构造]节。)。其他行表示可变设置和键绑定。      

可变设置 

您可以通过在init文件中使用set命令更改Readline中变量的值来修改Readline的运行时行为。语法很简单:                          

设置变量值    

例如,下面是如何从默认的类似Emacs的键绑定转换为使用vi行编辑命令:                

设置编辑模式vi    

在适当情况下,可识别变量名和值而不考虑大小写。未识别的变量名将被忽略。                

如果值为null或空、on(不区分大小写)或1,则布尔变量(可以设置为on或off的变量)将被设置为on。任何其他值都将导致该变量被设置为off。                

许多运行时行为可由以下变量改变。bell-style          

控制Readline想敲终端铃时发生什么。如果设置为“none”,Readline永远不会敲铃。如果设置为      

如果可用,Readline使用可见铃声。如果设置为“可听”(默认),Readline将尝试敲响终端的铃声。                   

绑定特殊字符

如果设置为“on”,Readline将尝试将由内核的终端驱动程序特别处理的控制字符绑定到其Readline对应字符。                    

评论开始

执行insert-comment命令时,在行的开头插入的字符串。默认值为“#”。                 

忽略大小写完成

如果设置为“打开”,Readline以不区分大小写的方式执行文件名匹配和补全。默认值为“关闭”。                  

完成查询项

可能完成项的数量决定了何时询问用户是否显示可能性列表。如果可能完成项的数量大于此值,Readline将询问用户是否希望查看这些选项;否则,它们将直接列出。此变量必须设置为大于或等于0的整数值。负值表示Readline绝不会询问。默认限制是100。                                                              

转换为元数据

如果设置为“on”,Readline将通过剥离第8位并以ESC字符为前缀,将第8位设置为ascii键序列的字符转换为元前缀键序列。默认值为“on”。                                     

禁用完成

如果设置为“打开”,则Readline将抑制单词补全。补全字符将插入到行中,就像它们被映射到self-insert一样。默认值是“关闭”。                           

编辑模式

editmode变量控制使用哪种默认的键绑定集。默认情况下,Readline在Emacs编辑模式下启动,在这种模式下,按键与Emacs最为相似。此变量可以设置为“Emacs”或“vi”。                                  

启用键盘

设置为“on”时,Readline将尝试在调用应用程序时启用应用键盘。有些系统需要启用箭头键才能使用该功能。默认设置为“off”。                      

展开-tilde

如果设置为“打开”,则在Readline尝试完成单词时执行tilde扩展。默认设置为“关闭”。 

历史保存点

如果设置为“on”,历史代码a将尝试将点放置在用previous-history或next-history检索的每个历史行的相同位置。默认设置为“off”。                         

水平滚动模式

此变量可以设置为“打开”或“关闭”。将其设置为“打开”意味着当编辑的行长于屏幕宽度时,这些行将在单个屏幕行上水平滚动,而不是换到新的屏幕行。默认情况下,此变量设置为“关闭”。                                          

输入元

如果设置为on,Readline将启用八位输入(它将不会清除读取字符中的第八位),无论终端声称它能支持什么。默认值是off。名称meta-flag是此变量的同义词。                                           

搜索终止符

用于终止增量搜索的字符串,但不将该字符作为命令执行(请参见第367页的31.2.5[Searching]部分  )如果此变量未赋值,则字符ESC和C-J将终止递增搜索。                 

keymap设置Readline对当前键绑定的键图示意图-         

可接受的键映射名称有:emacs、emacs-stan dard、emacs- meta、emacs- ctlx、vi、vi- move、vi- command和vi-insert。vi等同于vi- command;emacs等同于emacs-stan dard。默认值为emacs。编辑模式变量的值也会影响默认键映射。                            

标记目录

如果设置为“on”,完成的目录名称后面会附加斜杠。默认值为“on”。               

标记修改过的行

将此变量设置为“on”时,Readline会在已修改的历史行的起始处显示一个星号(“*”)。此变量默认为“off”。                            

标记已链接的目录

如果设置为“打开”,则已完成的名称是指向目录的符号链接,后面会附加斜杠(取决于mark-目录的值)。默认设置是“关闭”。                 

匹配隐藏的文件

将此变量设置为“打开”时,读行程序在执行文件名完成时将使Readline与以“.”开头的文件名(隐藏文件)相匹配,除非在要完成的文件名中由用户提供了前导“.”。此变量的默认值为“打开”。 

输出元数据

如果设置为on,Readline将直接显示具有第八位的字符,而不是以meta-前缀的转义序列。默认值是off。                          

页面完成

如果设置为“on”,Readline将使用一个内部的类似pager的程序来一次显示一屏可能的补全。此变量默认为“on”。                        

打印-完成时间范围统计

如果设置为“打开”,则Readline将按字母顺序水平排列匹配项来显示补全,而不是沿屏幕向下排列。默认设置为“关闭”。                       

如果存在歧义,则显示全部

这将改变补全函数的默认行为。如果设置为on‘,那么对于有多个可能补全结果的单词,匹配结果会立即列出而不是敲响铃声。默认值为off。                               

显示所有未修改的

这会以类似于显示-全部-如果-模糊的方式改变完成函数的默认行为。如果设置为‘开启’,具有多个可能完成但没有部分完成的词(这些可能的完成没有共同前缀)会导致匹配项立即列出,而不是敲响铃声。默认值是‘关闭’。                                                     

可见统计信息

如果设置为“打开”,则在列出可能的补全时,在文件名后面附加表示文件类型的字符。默认设置为“关闭”。                      

键绑定 

控制init文件中的键绑定的语法很简单。首先,您需要找到要更改的命令的名称。以下各节包含命令名称、默认键绑定、如果有的话以及命令功能的简短说明的表格。                                              

一旦您知道了命令的名称,只需在init文件中的一行上放置您希望绑定该命令的键名、冒号,然后是命令的名称。键名可以以不同的方式表达,具体取决于您觉得最舒适的方式。                                                  

除了命令名称之外,readline还允许键绑定到在按下键时插入的字符串(宏)。                      

keyname:函数名或宏   

keyname是用英语拼写的密钥名称。例如:           

控制-u:通用参数  

Meta-Rubout:后杀字词Control-o:“>输出”     

在上面的例子中,C-u绑定到函数universal-argument,M-DEL绑定到函数backward-kill-wor d,C-o绑定运行右侧表达式(即在行中插入文本‘>output’)。                                          

在处理此键绑定语法时,识别出一些符号字符名:DEL、ESC、ESCAPE、LFD、NEW- LINE、RET、RETURN、RUBOUT、SPACE、SPC和TAB。                       

“keyseq”:功能名称或宏    

keyseq与上面的keyname不同,字符串表示一个键序列时,可以通过将键序列放在双引号中来指定。可以使用一些gnu Emacs风格的键转义符,如下例所示,但特殊字符名称不被识别。                                              

“c-u”:通用参数  

“\c-x\c-r”:重新读取初始化文件“\e[11~”:“功能键1”     

在上面的例子中,C-u再次与函数绑定                

普遍论证(就像第一个例子一样),‘C-x        

C~-r‘绑定到函数re-read-init-file,和’ESC[1 1           

在指定键序列时,可用以下gnu Emac风格的转义序列:            

/c-控制前缀              

/M-元前缀              

/e为转义字符斜线                  

\“”,双引号                     

\‘’,单引号或撇号                     

除了gnu Emacs样式转义序列之外,还有一组斜杠转义序列可用:             

(a警报(铃声))b返回spa ce d删除                                  

\f表单换行符                

\n换行               

\r行回车\t水平制表符\t v垂直制表符                                    

\nnnnn 8位字符,其值为八进制值nnn(1到                     

三位数) 

\xHH值为十六进制HH的八位字符      

(一或两个六位数)    

在输入宏文本时,必须使用单引号或双引号来表示宏定义。未加引号的文本被视为函数名。在宏体中,上述反斜杠转义符会被展开。反斜杠会引用宏文本中的任何其他字符,包括“”和“”。例如,以下绑定会使‘C-x’在行中插入一个“’:                                                            

"\C-x\\":"\\"  

31.3.2条件启动构造  

Readline实现了一个类似于C预处理器的条件编译功能,允许通过测试来执行键绑定和变量设置。Readline使用了四个解析器指令。                                   

$ if The$ if构造允许根据编辑模式、使用的终端或使用Readline的应用程序来绑定。测试文本延伸到行的末尾;不需要任何字符来隔离它。                                                     

模式$if指令的mode=形式用于测试Readline 

在emacs或vi模式下。此选项可以与“set keymap”命令一起使用,例如,仅当Readline在emacs模式下启动时,才可以在emacs标准和emacs-ctlx键图中设置绑定。                          

术语=form可用于包括特定于终端的键绑定                     

输入,或许是为了绑定终端功能键输出的关键序列。‘=’右侧的单词会与终端全名以及终端名称中第一个‘-’之前的部分进行比对。这使得sun可以同时匹配sun和sun-cmd。                                            

申请

应用程序构造用于包含特定于应用程序的设置。每个使用Readline库的程序都会设置应用程序名称,您可以测试特定值。这可以用来将键序列绑定到对特定程序有用的函数。例如,以下命令会添加一个键序列,用于在Bash中记录当前或前一个单词:                                             

$如果Bash  

#引用当前或上一个单词“\C-xq”:”“\eb”“ef\“”           

$endif

$ endif此命令,如前面的示例所示,终止一个$if命令。                  

$else在此分支中的$if直接指令在测试失败时执行。   

$include该指令将单个文件名作为参数,并从该文件中读取命令和绑定。例如,以下指令将从“/etc/inputrc”中读取:                       

$include/etc/inputrc  

31.3.3示例启动文件  

下面是一个inputrc文件的示例。它说明了键绑定、变量赋值和条件语法。              

#本文件控制使用GNU Readline库的程序的行输入编辑行为。现有                                   

#程序包括FTP、Bash和GDB。#          

#可以使用C-xC-r重新读取inputrc文件。#以“#”开头的行是注释。                         

#

#首先,包括来自/etc/Inputrc的任何系统范围绑定和变量分配                   

$include/etc/Inputrc  

#

#设置各种用于emacs模式的绑定。Set editing-mode emacs          

$ifmode=emacs 

Meta-Control-h:忽略函数名后的后杀字文本          

#

#在键盘模式下使用箭头键#         

#“\M-OD”:向后-字符               

#“\M-OC:前导字符

#“\M-OA:“前史”#“\M-OB”:“后史” 

#

#ANSI模式下的箭头键#   

“\M-[D”:向后字符               

“\M-[C”:前进字符               

“\M-[A”:历史记录“\M-[B”:下一次历史记录                               

#

#在8位键盘模式下使用箭头键#         

#“\M-C-OD:“后向字符”             

#“\M-C-OC:前导字符

#"\M-\C-OA":previous-history#"\M-\C-OB":next-history                           

#

#在8位ANSI模式下使用箭头键#         

#“\M--C-[D:向后字符#M--C-[C:向前字符              

#“\M-“C-[A”:上一次历史#“M-“C-“[B”:下一次历史 

C-q:quoted-insert$endif   

#旧式绑定。这是默认设置。              

标签:已完成

#便于sh ell交互的宏$if Bash                 

#编辑路径      

“C-xp”:PATH=${PATH}e/c-e/c-a ef/c-f准备输入一个带引号的单词--               

#插入打开和关闭双引号

#并移到打开的引号“\C-x”“”:“”“”“C-b”之后                

#在序列和宏中插入反斜杠(测试反斜杠转义#)           

"\C-x\\":"\\"  

#引用当前或上一个单词“\C-xq”:”\eb“”ef\“”           

#添加绑定以刷新未绑定的行“C-xr”:重绘当前行                     

#编辑当前行的变量。           

"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="$endif 

#如果有可见铃,就使用可见铃样式                     

#在读取set input-meta时,不要将字符缩减到7位                   

#允许在此处插入ISO-LATIN1字符              

#会将已转换的toprefix-meta序列集转换为meta集并关闭该设置           

#直接显示设置第8位的字符,而不是以meta-前缀显示的字符                          

已开启setoutput-meta    

#如果一个单词有超过1 50种可能的完成方式,请询问用户是否希望看到所有这些方式setcompletion-query-items 1 50     

#对于FTP$if Ftp       

"\C- xg": " get\M-?""\C-xt":"put\M-?"       

“\M-”:提取最后一个参数  

$endif

31.4可绑定的读行命令  

本节介绍可绑定到键序列的Readline命令。没有键序列的命令名称默认是未绑定的。                

在以下描述中,point指的是当前光标位置,mark指的是通过set-mark命令保存的光标位置。point和mark之间的文本被称为区域。                              

31.4.1移动命令  

起始线(C-a) 

移动到当前行的起始位置。      

末端(C-e) 

移动到队列的末尾。      

前导字符(C-f) 

向前移动一个字符。   

向后字符(C-b) 

向后移动一个字符。   

前向(M-f) 

向前移动到下一个单词的末尾。单词由字母和数字组成。              

向后方向(M-b) 

移动到当前或上一个单词的开头。单词由字母和数字组成。              

清屏(C-l) 

清除屏幕并重新绘制当前线,使当前线位于屏幕顶部。               

重绘电流线() 

刷新当前行。默认情况下,此行是未绑定的。        

31.4.2操纵历史记录的命令    

接受行(换行或回车)  

无论光标位于何处,都接受该行。如果此行非空,则可以将其添加到历史列表中以备将来调用withadd_h history()。如果此行非空,则可以将其添加到历史列表中以备将来调用。                         

line是修改后的历史行,history line还原为原始state.previous-history(C-p)                

在历史列表中“后退”,获取上一个命令。   

下一次历史记录(C-n) 

在历史列表中“前进”,并记住下一个命令。         

历史开端(M-<) 

移动到历史记录的第一行。       

历史结束(M->) 

移动到输入历史记录的末尾,即当前正在输入的行。             

反向搜索历史记录(C-r) 

从当前行开始向后搜索,并根据需要向上移动浏览历史记录。这是一个增量搜索。                    

前向搜索历史(C-s) 

从当前行开始向前搜索,并根据需要向下搜索历史记录。这是一个增量搜索。                    

非递增逆向搜索历史(M-p) 

从当前行开始向后搜索,并根据需要使用非递增搜索,向上移动通过历史记录来查找用户提供的字符串。                          

非递增前向搜索历史(M-n) 

从当前行开始搜索,根据需要向下搜索历史记录,使用anon-递增搜索来搜索用户提供的字符串。                        

历史记录搜索前进() 

在历史记录中搜索从当前行的起始位置到该点之间的字符串。这是非递增搜索。默认情况下,此命令是未绑定的。                           

历史搜索-后退至ward() 

在历史记录中向后搜索当前行开始和该点之间的字符串。这是非递增搜索。默认情况下,此命令是未绑定的。                           

yank-第n个词(中-西-英) 

将第一个参数插入到前一条命令(通常是前一行的第二个词)的位置。对于参数n,插入前一条命令中的第n个词(前一条命令中的词从0开始计数)。负数参数表示从前一条命令末尾的第n个词开始插入。一旦计算出参数n,该参数将被提取,就像指定了‘!n’历史扩展一样。                

yank-last-arg(M或M-_)   

将最后一个参数插入到前一个命令(即前一条历史记录的最后一项)。如果有参数,则行为与‘n-th-arg完全相同。后续调用’toyank-last-arg‘会回溯历史列表,依次插入每行的最后一个参数。历史扩展功能用于提取最后一个参数,就像指定了’!$‘历史扩展一样。           

31.4.3更改文本的命令   

删除字符(C-d) 

删除点处的字符。如果点位于行的开头,行中没有字符,且最后一个键入的字符未绑定到delete-char,则返回eo f。                                

backward-delete-char(删除字符) 

删除光标后面的字符。一个数字参数me ans to kill the            

字符而不是删除它们。forward-backward-delete-char()      

删除光标下的字符,除非光标位于行的末尾,在这种情况下,将删除光标后面的字符。默认情况下,此操作不绑定到键。                                 

引用插入(C-q或C-v)  

将下一个键入的字符逐字逐句地添加到行中。例如,这就是如何插入像C-q这样的键序列的方法。                  

标签插入(M-TAB) 

插入一个标签character.self-insert(a,b,A,1,!,.. .)            

插入yourself.transpose-chars(C-t)   

将光标前的字符拖动到光标前的字符上,同时将光标向前移动。如果插入点位于行的末尾,则此操作会将行的最后两个字符交换。负参数ts没有效果。                                 

转置字(M-t) 

拖动点前的单词,使其超过点后的单词,同时移动点过该单词。如果插入点位于行的末尾,则会将行上的最后两个单词交换。                              

上衣-词(M-u) 

将当前(或后续)单词大写。使用负参数时,将上一个单词大写,但不移动光标。                    

降级词(M-l) 

将当前(或后续)单词小写。如果参数为负值,则将前一个单词小写,但不移动光标。          

大写单词(M-c) 

将当前(或后续)单词大写。使用负参数时,将前一个单词大写,但不移动光标。               

覆盖模式() 

切换覆盖模式。使用显式的正数参数,切换到覆盖模式。使用显式的非正数参数,切换到插入模式。此comm和只影响emacsmode;vi模式下的覆盖方式不同。每次调用readline()都从插入模式开始。       

在覆盖模式下,绑定到self-insert的字符会替换点处的文本,而不是将文本向右移动。绑定到backward-delete-char的字符会将点前的字符替换为空格。                           

默认情况下,此命令是未绑定的。     

31.4.4杀戮和绑架  

杀线(C-k) 

从点到line.backward-kill-line的末尾删除文本(C-x擦除)          

向line.unix-line-discard(C-u)的起始位置回退        

从光标向后杀到当前line.kill-whole-line()的开头            

杀死当前行上的所有字符,无论点i位于何处。默认情况下,此选项是不受限制的。               

杀伤性词(M-d) 

从当前单词的开头到结尾进行杀空,或者如果在单词之间,则从下一个单词的开头到结尾进行杀空。word边界与前向单词相同。                     

后杀字(M-DEL) 

删除点后面的单词。word边界与反向单词相同。unix-word-rubout(C-w)            

使用空格作为单词边界,删除“点”后面的单词。被删除的文本保存在剪贴板上。                   

unix文件名删除() 

使用空白和斜杠字符作为单词边界,删除点后面的单词。被删除的文本保存在剪贴板上。                      

删除水平间距() 

删除点周围的全部空格和制表符。默认情况下,此选项是未绑定的。kill-region()             

删除当前区域中的文本。默认情况下,此命令为unbound.copy-region-as-kill()              

将该区域中的文本复制到kill缓冲区,这样就可以立即提取。                

默认情况下,此命令为unbound.copy-backward-word()       

将指向k ill缓冲区的单词复制到k ill缓冲区。单词边界与backward- word相同。默认情况下,此命令是未绑定的。                       

复制前一个单词() 

将点后的单词复制到杀伤缓冲区。单词边界是             

与forward-word相同。默认情况下,此命令是未绑定的。yank(C-y)          

将杀戮环的顶部拉入缓冲器中的点。   

扬克弹(M-y) 

旋转杀环,然后拉出新的顶部。只有在前一个命令为yank或yank- pop时才能执行此操作。                   

31.4.5指定数字参数  

数字参数(M-0、M-1、...、M--)      

将该数字添加到已累积的参数中,或者开始一个新的参数。M--开始一个负参数。             

通用参数() 

这是另一种指定参数的方式。如果此命令后面跟着一个或多个数字,可选地带有前导负号,这些数字定义了参数。如果命令后面跟着数字,再次执行universal-argument将结束数值参数,但其他部分将忽略。作为特殊情况,如果此命令紧接其后是一个既不是数字也不是负号的字符,则下一个命令的参数计数将乘以四。参数计数初始为一,因此首次执行此函数时参数计数为四,第二次则为十六,依此类推。默认情况下,这不受键位限制。                                    

31.4.6让Readline Type为您服务    

完成(TAB) 

尝试在点之前的文本上完成。实际完成 

执行的是应用程序特定的。默认值为filename completion .possible-completions(M-?)         

列出point.insert-completions前文本的可能完成形式(M-*)         

在本段落中插入所有可能生成的点前的文本完成部分           

由possible-completions.menu-complete()编写  

类似于完整,但用列表中唯一匹配项替换待完成的单词。重复执行菜单完成步骤,遍历可能的补全列表,依次插入每个匹配项。在补全列表末尾,敲击铃声(根据铃声设置)并恢复原始文本。参数n使匹配项列表向前移动n个位置;负数参数可用于向后遍历列表。此命令旨在绑定于TAB键,但默认未绑定。                                                                                               

删除字符或列表() 

如果光标不在行的开头或结尾,则删除该字符(类似于delete-char)。如果在行的结尾,则与possible-completion的行为相同。此命令默认不受绑定。                            

31.4.7键盘宏 

start-kbd-macro(C-x()  

开始保存键入当前键盘宏中的字符。 

结束kbd-宏(C-x))  

停止保存键入当前键盘宏中的字符,并保存定义。            

call-last-kbd-macro(C-x e) 

重新执行上一个定义的键盘宏,方法是使字符在           

宏看起来就像在键盘上输入的一样。       

31.4.8一些杂项命令  

re-read-init-file(C-x C-r) 

读取inputrc文件的内容,并将其中找到的任何绑定或变量赋值纳入其中。              

中止(C-g) 

中止当前编辑命令并敲响终端铃声(取决于铃声设置)。       

大写版本(M-a、M-b、M-x……)    

如果元字符x为小写字母,则运行与相应大写字母绑定的命令。            

prefix-meta(ESC) 

将下一个键入的字符转换为meta。这适用于没有meta键的键盘。键入“ESCf”相当于键入M-f。                     

撤销(C_或C- x C-u)    

增量撤销,分别记住每行。      

回转线(M-r) 

撤销对这条线所做的所有更改。这就像执行了撤销命令            

足够的时间回到起点。tilde-expand(M-~)         

对当前单词执行斜线扩展。      

设定标记(C-@) 

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

交换点和标记(C-xC-x)  

将点与标记交换。当前光标位置被设置为保存的位置,而旧的光标位置则作为标记保存。                         

字符搜索(C-]) 

读取字符,并将指针移动到该字符的下一个出现位置。负计数用于搜索之前的出现位置。                     

字符搜索后退(M-C-]) 

读取字符,并将指针移动到该字符的前一次出现位置。负计数用于搜索后续出现的位置。                    

插入注释(M-#) 

如果没有数值参数,comment-begin变量的值将插入到当前行的开头。如果提供了数值参数,  

此命令起到切换的作用:如果行首的字符与comment- begin的值不匹配,则插入该值;否则,从行首删除comment- begin中的字符。无论哪种情况,行都将被视为已输入换行符。                                                

倾倒功能() 

将所有函数及其键绑定打印到Readline输出流。如果提供了数值参数,则输出将以可作为inputrc文件一部分的方式格式化。此命令在默认情况下是不可用的。                                  

变量倾倒() 

将所有可设置变量及其值打印到Readline输出流中。如果提供了数值参数,则输出将以一种方式格式化,以便可以将其作为inputrc文件的一部分。此命令在默认情况下是不可用的。                                         

倾倒-宏() 

打印与宏绑定的所有Readline键序列及其输出的字符串。如果提供了数值参数,则输出将以可作为输入rc文件一部分的方式进行格式化。此命令默认是未绑定的。                                          

emacs编辑模式(C-e) 

当处于vi命令模式时,这将导致切换到emacs编辑模式。            

vi编辑模式(M-C-j) 

在emacs编辑模式下,这会导致切换到vi编辑模式。            

31.5 Readline vi模式  

虽然Readline库没有完整的vi编辑功能,但它确实包含               

足以允许简单地编辑行。Readline vi模式的行为如下面所述              

posix 1003.2标准。   

为了在emacs和vi编辑模式之间进行交互式切换,可使用命令M-C-j (在vi模式下绑定到emacs编辑模式,在emacs模式下绑定到vi编辑模式)。Readline的默认设置为emacs模式。                               

当你在vi模式下输入一行时,你已经处于“插入”模式,就像你键入了“i”一样。按下ESC会切换到“命令”模式,在这里你可以使用标准的vi移动键来编辑该行的文本,用“k”跳转到前一条历史行,用“j”跳转到后一条历史行,等等。                                                       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值