iTerm2:删除行?


78

我试图⌘+DeleteiTerm2中映射(退格)以删除到该行的开头(就像它在浏览器和文本编辑器中一样),我找不到适合它的转义代码。我^[1K根据在Wikipedia上阅读的内容尝试了1K()。它只是打印一个“ K”。

编辑:我发现了Ctrl+U。现在了解如何映射它。也许十六进制代码21(U是第21个字母),所以是0x15?


3
CTRL+A CTRL+K在此期间尝试。或CTRL+C
卡洛斯(Carlos)

1
ctrl + K是一个肯定要学习的好方法。但是我更习惯于cmd + delete。我一定有 它在其他地方都有效!
史蒂文·卢

1
这里还有一些您可能会发现有用的信息。ALT+Backspace->发送十六进制0x17,ALT+RightArrow->发送Exc Seq f,ALT+LeftArrow->发送Exc Seq b
卡洛斯

Alt + Delete已经可以立即使用。我最近才设置^ [b和^ [f,它们效果很好。我真的特别希望Cmd + Delete删除整行。
史蒂文·卢

@Carlos,使用ctrl + C的好处,实际上我已经做了很多。但是,这是不同的行为,我也不想意外终止内容。例如,如果我在某种解释器中,并且想要删除我输入的行。Ctrl + C仅在特定状态下工作,而这种状态依赖性正是我要摆脱的状态。国家依赖性是可用性的祸根。
史蒂文·卢

Answers:


125

我知道了。我不知道为什么iTerm2中的十六进制代码映射会产生关联的Ctrl + key映射,但是它们确实会这样做。也不知道0x00是什么意思,因为未按预期将其分配给A。(尽管我确实相信Unix在处理空字节方面有其自己的约定-例如,我们xargs接受例如一个空字节定界格式find,例如,如果我们可以使用iTerm2将其绑定到热键,那就太好了)

我能够发现Ctrl + U几乎完成了我想要的任务(它删除了整行,而不是只删除光标之前的内容,但是无论如何... Ctrl + Y作为奖励可以使所有内容恢复原状)。然后我好奇地发现我的Cmd + Left和Cmd + Right有十六进制代码0x1并分别0x5映射到^A^E……0x15对于^U


1
我希望我可以再投票5次。我花了很多时间寻找这个。您如何从0x1和0x5得出0x15?
bizi

2
哈哈,嗯,u只是字母表中的第21个字母!因此,我认为这种表达是正确的。
史蒂文·卢

2
有关信息,请按照相同的逻辑删除,直到该行的末尾为止,Ctrl-K ... K是字母的第11个字母,即十六进制为0xB。因此,将'Command-Del->'分配给十六进制0xB以删除,直到行尾为止。
user2707671 2015年

1
@bizi扩展了Steven Lu的答案,“ u”是字母表的第21个字母,“ k”是字母表的第11个字母,所需的十六进制代码为hex(21)和hex(11),分别为'0x15'和'0xb '。我发现自己经常查看这些内容,因此,为了轻松xpython -c "import string; print(hex(string.ascii_lowercase.find('x') + 1))"~/.bashrc~/.bash_profilealias hexletter='python -c "import string,sys; print(hex(string.ascii_lowercase.find(sys.argv[-1]) + 1))"'
起见


41

在大多数shell中,将十六进制代码映射0x15+←Delete会删除整行(光标左侧和右侧的内容)。尽管有时不兼容,但我发现该映射:

+←Delete发送十六进制代码:

0x18 0x7f

执行所需的功能。如果您正在运行ZSH,则可能还需要将其添加到.zshrc文件中:

$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

因为默认情况下ZSH不会映射backward-kill-line到任何内容。

此外,您还可以通过映射删除光标右侧的所有内容:

+ fn+←Delete+Delete→发送十六进制代码:

0x0b

我写了一个全面的指南,在这里向您的终端添加添加大多数OSX标准键盘绑定的功能


有趣。这些十六进制值对应于Ctrl + X(取消),DEL(请参见ascii图表)。尽管这是我所听到的第一个,但将此序列解释为更有效的DEL形式是非常明智的。但是,当我在终端中键入它时(在Linux上未设置任何绑定),Zsh会向我发出蜂鸣声,而Bash只会插入a ^X,然后退格键将删除它。我确实使用iTerm中的按键绑定(将序列一起发送而没有人工延迟)进行了尝试,并且看到了相同的行为。这向我表明,bash也需要对其进行绑定。
史蒂文·卢

但是您完全正确的backward-kill-line是使用与⌘ + ←Delete。额外的配置有点麻烦,尽管一点也不差。
史蒂文·卢

由于某种原因,它会将其从历史记录中删除。当我用完向上箭头时,我不再得到删除的条目
Xitcod13

35

在OSX中,⌥+⌫和⌘+⌫分别是删除单词和删除行的快捷方式。⌘+←和⌘+→用于转到行的开头和结尾。默认情况下,iTerm2并非以这种方式配置,并且在线上存在许多误导性指南。以下是我发现可以在机器上工作的内容。

  1. 打开首选项(⌘+,)并转到“键”选项卡。
  2. 添加一个全局快捷键,然后键入您的快捷方式
  3. 在操作下拉列表中,选择发送十六进制代码

十六进制代码表示...

  1. 删除一个字:0x17。
  2. 删除一行:0x15。
  3. 移至行首:0x01。
  4. 移至行尾:0x05。只需打开一个新标签,它应该可以工作!

为了清晰起见,以下是屏幕截图: 替代文字


你救了我的一天!
杰瑞

25

对于Mac OS,大多数编辑器共享通用的快捷键+ Delete:删除以开始该行的开始,在iTerm2中,我们可以切换到此关键配置

在此处输入图片说明


这很棒。我一直在手动添加预设,以尝试进行“自然文本编辑”,并且该预设一次加载了我需要的所有内容。
claviska

15

我希望可以帮助你

map⌥<-删除以发送十六进制代码:0x1B 0x08

我已经测试过了,这是正确的。


2013年9月18日更新

这删除一个单词,而不是一行。


1
这是有趣的!您所描述的内容等同于Alt + Ctrl + H,当按Alt + Ctrl + Backspace时,我的特殊PuTTY设置也会发布该内容。在我的zsh shell中,它在单词(而不是整行)上退格。
史蒂文·卢

我会注意到,^H对于许多终端,Ctrl + H应该实际上意味着“退格”。Alt- / meta / escape-prefix将其转换为“ kill-word”似乎很明智,尽管目前尚不清楚它的支持范围。
史蒂文·卢

1
它删除的不是行,而是我要查找的词:)
hyouuu 2013年

谢谢谢谢谢谢谢谢谢谢。我不知道发生了什么变化,但这是我的旧Mac上的确切行为(实际上是它在此文本框中的工作方式),但是由于某些原因,我的新Mac上的情况完全不同。所有其他建议就引起看待“富/酒吧/巴兹”作为一个词,而不是3

4

如所指出的^U删除行。您可以使用Better Touch Tool轻松地重新映射命令。

它还具有用于自动化,鼠标,键盘和键盘映射的出色功能。还包括用于智能边框的窗口功能。


我认为有些人正在寻找内置的解决方案,并且不想使用其他工具,因此不推荐使用。不幸的是,这并非总是可能的,并且委托第二种工具是很好的作弊手段。
鲁道夫·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.