Назад | Перейти на главную страницу

Как в bash удалить частичное слово, похожее на ctrl-w

Скажем, у меня есть каталог с одним файлом mylongfilename.blahdeblah.txt, теперь нажатия клавиш mv [tab] [tab] приведут к mv mylongfilename.blahdeblah.txt mylongfilename.blahdeblah.txt в моей командной строке

Теперь я хотел бы напечатать что-нибудь вместо второго blahdeblah. Если я несколько раз нажму ctrl-b, я вернусь к. до .txt На этом этапе я хочу ввести что-то вроде ctrl-w, чтобы удалить предыдущее. Т.е. я бы получил mv mylongfilename.blahdeblah.txt mylongfilename..txt

Есть ли сочетание клавиш, аналогичное ctrl-w, для этого? (Ctrl-w удалит до предыдущего пробела - не то, что я хочу)

Кажется, вы находитесь в режиме emacs. Чтобы делать то, что вы хотите там, это работает:

meta-backspace

(Строго говоря, это M-Del. См. эта страница для получения дополнительных сочетаний клавиш Emacs. Я не думаю, что режим emacs в Bash поддерживает их все, но он поддерживает этот.)

telemachus ~ $ mv mylongfilename.blahblah.txt mylongfilename.|.txt

Трубка показывает, где находится курсор.

В Bash есть режимы emacs и vi. В режиме vi просто dw для удаления слова или cw для изменения слова. установите -o vi, чтобы перейти в режим vi. Вероятно, есть эквивалент режима emacs.

man readline - это справочник по клавиатуре bash, а специальные версии bash для readline находятся в man bash.

Из man bash:

COMP_WORDBREAKS
    The set of characters that the Readline library treats as word separators when
    performing  word  completion.   If COMP_WORDBREAKS is unset, it loses its special
    properties, even if it is subsequently reset.

При изменении этого параметра должны измениться символы, используемые в качестве разрывов слов, поэтому, если вы добавили '.' к текущему значению, тогда Ctrl-w удалит обратно до '.' вместо возврата к предыдущему месту.

Вы можете попробовать поменять местами слова, чтобы поставить деталь blahdeblah в конце строки (с помощью Esc-T), а затем удалите конец строки:

  • mv [вкладка] [вкладка]

    mv mylongfilename.blahdeblah.txt mylongfilename.blahdeblah.txt

  • [Esc-T] (поменять местами последние два слова перед курсором)

    mv mylongfilename.blahdeblah.txt mylongfilename.txt .blahdeblah

  • [Ctrl-w]

    mv mylongfilename.blahdeblah.txt mylongfilename.txt

Предполагая, что у вас есть довольно много таких операций «mv», которые нужно выполнить в этом каталоге, почему бы не написать сценарий короткого перевода, например, «sed»?

Вы найдете некоторые уловки Вот. Но не позволяйте этому ограничивать вас, но все это означает поиск еще нескольких sed и awk.