Как удалить часть пути в интерактивной оболочке?

19

Есть ли в bash и zsh ярлык для удаления одного компонента пути? Например, если я печатаю ls ~/local/color/, а курсор находится в конце строки, есть ли ярлык для удаления color/в конце? В идеале мне нужны решения как в режиме vi, так и в режиме emacs.

Вайн
источник

Ответы:

25

Наиболее часто используемые команды в режиме bash emacs по умолчанию для наиболее часто используемых клавиатур:

движение

  • Ctrl- pили Up: предыдущая команда
  • Ctrl- nили Down: следующая команда
  • Ctrl- bили Left: предыдущий символ
  • Ctrl- fили Right: следующий символ
  • Alt- b: предыдущее слово
  • Alt- f: следующее слово
  • Ctrl- aили Home: начало команды
  • Ctrl- eили End: конец команды

Редактирование

  • BkSpc: удалить предыдущий символ
  • Ctrl- dили Del: удалить текущий символ
  • Alt- BkSpc: удалить слово слева
  • Alt- d: удалить слово справа
  • Ctrl- u: удалить до начала команды
  • Ctrl- k: удалить до конца команды
  • Ctrl- y: вставить последний срез

Разное

  • Cltr- /: отменить
  • Cltr- r: пошаговый поиск в истории
enzotib
источник
2
Дополнение: установите ярлык для этой цели в zshbindkey [key] vi-backward-kill-word
Вайн
Благодарю. Я добавил это в свой файл ~ / .zshrc, и он хорошо работает, когда я нажимаю Alt + Backspace: bindkey "^ [^?" ви-назад Смертельный слово. Это не идеально.
Тим Стюарт
Alt-Bckspc и Alt-d хорошо работают с путями к файлам, на которых я их пробовал. (на баш)
скромно
10

Там также unix-filename-ruboutдля Readline!

# in ~/.inputrc
# press ctrl-b to delete unix filename parts
# see: man bash | less -p 'unix-filename-rubout' and
#      http://www.calmar.ws/vim/vi-bash.html
set editing-mode vi
set keymap vi
"\C-b": unix-filename-rubout
mikeo
источник
2
ИМХО unix-filename-ruboutявляется правильным ответом на заданный вопрос, поскольку он удаляет косую черту или пробел, тогда как Alt-BkSpcостановится на таких символах, как дефис, подчеркивание, точка и т. Д.
Стив
6

По умолчанию bash (и я предполагаю, что zsh) будет в режиме emacs. Вы можете попробовать что-то вроде этого:

Esc + bвернет курсор на одно слово. Ctrl + kудалит до конца строки.

Большинство современных оболочек (например, bash) реализуют расширенные функции редактирования командной строки. Эти команды либо близки к редактированию emacs (Ctrl + A для начала строки, Ctrl + E для конца строки, ...).

Если вы знакомы с vi-подобными редакторами, вы можете попробовать включить vi-mode.

set -o vi

Он предоставляет вашей оболочке vi-подобные режимы (режим команд / режим вставки), и вы получаете доступ к стандартным командам (d для удаления, r для замены, ...)

В режиме Vi, вот как вы будете делать то, что вы описали:

Esc (command mode); d; b.
rahmu
источник
1
Я бы не сказал «Редактирование командной строки еще более мощно и полно в режиме vi», в режиме emacs есть команды, которые делают все, что вы можете делать в режиме vi .
энзотиб
Признаюсь, я немного увлекся. Я перефразирую это.
раму
Спасибо, что напомнили мне, что в bash есть vi-mode, поэтому я могу использовать dbего в bash. Я также нашел vi-backward-kill-wordв zsh то, что я хочу, и это более удобно, чем установить vi-mode в bash. Но я все еще хочу найти ярлык для режима emacs для этой цели в bash.
Вайн
Или "alt-bC". Этот способ не оставляет завершающего символа, который dbесть в некоторых случаях.
Wildcard