Як видалити частину шляху в інтерактивній оболонці?


19

Чи є ярлик у bash та zsh для видалення одного компонента шляху? Наприклад, якщо я набираю ls ~/local/color/, а курсор знаходиться в кінці рядка, чи є ярлик для видалення color/в кінці? В ідеалі я хочу рішення як у vi-mode, так і в режимі 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: поступовий пошук історії назад

2
Доповнення: встановіть для цього ярлик у zshbindkey [key] vi-backward-kill-word
Vayn

Спасибі. Я додав це до свого файлу ~ / .zshrc, і він добре працює для мене, коли натискаю Alt + Backspace: bindkey "^ [^?" vi-backward-kill-word. Це не ідеально.
Тім Стюарт

Alt-Bckspc і Alt-d добре працюють з файловими шляхами, на яких я їх пробував. (on bash)
demure

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

2
IMHO 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

Він надає вашій оболонці відоподібні режими (режим команд / режим вставки), і ви отримуєте доступ до стандартних команд (d для видалення, r для заміни, ...)

У режимі Vi, ось як би ви зробили те, що описали:

Esc (command mode); d; b.

1
Я б не сказав: "Редагування командного рядка ще більш потужне та повноцінне у режимі vi", у режимі emacs є команди робити все, що можна зробити у режимі vi .
enzotib

Зізнаюся, я трохи захопився. Я перефразую це.
rahmu

Дякую, що нагадали мені, що в баші працює ві-режим, тому я можу використовувати dbв цьому сценарії баш. Я також знайшов, що vi-backward-kill-wordв zsh - це те, що я хочу, і це зручніше, ніж встановлювати vi-mode в bash. Але я все ж хочу знайти ярлик режиму emacs для цієї мети в bash.
Вайн

Або "alt-bC". Цей спосіб не залишає сліду характеру, що dbв деяких випадках.
Wildcard
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.