有没有办法在bash的当前行上运行regexp-string替换?
我经常在这种情况下找到自己,在那里我输入了一个长命令行,然后意识到,我想在一行的某个地方改变一个词。
我目前的方法是完成该行,按 Ctrl + A (到达行的开头),插入一个#(注释掉该行),按回车键然后使用^oldword^newword
语法(^oldword^newword
在用newword替换oldword后执行上一个命令。)
但必须有一种更好(更快)的方法来实现这一目标。 (鼠标是不可能的,因为我大部分时间都在ssh-sessions中。)
可能有一些类似emacs的键命令,我不知道。
编辑:我尝试过使用vi-mode。发生了一件奇怪的事。虽然我是一个充满爱心的用户,但是使用我心爱的bash时我遇到了很大的麻烦。所有那些已经被我的潜意识烧伤的手指动作突然停止了工作。我很快回到了emacs-mode并考虑过,给emacs一个尝试作为我最喜欢的编辑器(虽然我猜,同样的事情可能会再次发生)。
答案 0 :(得分:3)
天儿真好,
如何使用vi模式呢?只需输入set -o vi
即可然后你可以转到你想要改变的词,然后根据词中的内容做一个cw或cW?
糟糕,忘了添加你在命令历史记录的前一行输入一个ESC k到o。
您通常使用什么编辑?
欢呼声, 罗布
编辑:我在原始回复中忘记说的是你需要在vi中使用你在“ex”模式下输入的命令来考虑bash中的vi命令行,即在你输入之后结肠。
最糟糕的是,您需要使用h(左侧)和l(右侧)的古老vi命令来浏览命令历史记录。你可以使用w(或W)在单词之间反弹。
一旦你习惯了它,你可以使用各种各样的命令,例如:进入ESC / my_command将回顾你的历史记录,最近的第一个,找到包含文本my_command的命令行的第一个出现。一旦找到了,你就可以用n来找到下一个出现的事件,然后用N来反转搜索的方向。
我要阅读bash的手册页,了解vi模式下可用的内容。一旦你克服了向上箭头和向下箭头被ESC k替换的事实,然后是j,你会看到vi模式提供的不仅仅是emacs模式,用于bash中的命令行编辑。
恕我直言! ( - :
的Emacs?八十megs并不断交换!
欢呼声, 罗布
答案 1 :(得分:3)
在ksh中,在vi模式下,如果在命令模式下点击“v”,它将在当前命令行的内容上产生一个完整的vi会话。然后,您可以使用全部vi命令进行编辑(在您的情况下进行全局搜索和替换)。当:来自vi的wq时,执行编辑的命令。我确信bash存在类似的东西。由于bash倾向于扩展其前身,所以可能有类似的东西。
答案 2 :(得分:1)
不幸的是,不,没有更好的方法。如果你只是厌倦了按键,你可以使用宏来修剪它们。将以下内容添加到您的~/.inputrc
:
"\C-x6": "\C-a#\C-m^"
"\C-x7": "\C-m\C-P\C-a\C-d\C-m"
现在,在新的bash实例中(或通过按.inputrc
重新加载当前shell中的C-x C-r
),您可以执行以下操作:
ls abcxyz
)。#
,执行注释行,然后键入您的第一个^
。xyz^def
)。这不是很优雅,但我认为这是你用readline获得的最佳效果。