Готин Bash хак за изтриване на път

Забелязъл съм нещо интересно, което може да се прави в csh, но работи по друг начин в bash.
Да речем че съм написал някакъв дълъг път:

/mnt/storage/mp3/Manowar

... и се сетя че всъщност не съм имал предвид "Manowar" като последна директория, а "rammstein". Единия начин да оправя това е като набия 7 backspace-а и да изтрия всяка буква поотделно, докато стигна до наклонената черта. Ами ако се сетя че "rammstein" не е в "mp3", а в "/mnt/storage/Music"? Тогава чаткането по backspace става още повече.
В csh това става елементарно с CTRL-W - комбинацията изтрива всичко от командния ред до предната наклонена черта.
Така

/mnt/storage/mp3/Manowar

става

/mnt/storage/mp3/

с един CTRL-W. Следващия CTRL-W ще махне "mp3/", следващия ще махне "storage/" и т.н.
Гугъл върна един резултат на това търсене - тук в Shallow Thoughts.
На кракто решението е следното:
Това отива в ~/.inputrc:

set bind-tty-special-chars Off

А това отива в ~/.bash_profile:

bind '\C-w:backward-kill-word'

Шела се рестартира (logout -> login) и трябва да работи.
Обяснение на дълго защо се случва това - в горния линк.

Tags: , ,

4 Responses to “Готин Bash хак за изтриване на път”

  1. Manchev Says:

    Що просто не направиш ^mp3^Music^ ?

  2. ivanatora Says:

    Не те разбрах?
    Всъщност в духа на идеята - открих че в Убунту (rxvt-unicode) ALT+BACKSPACE работи със същия ефект по дефаулт без никакви настройки :)

  3. Manchev Says:

    ^String1^String2^ замества String1 със String2 в последната команда. Има го във всеки урок по bash

  4. ivanatora Says:

    Да но това прави друго. Идеята е да редактираме текущата команда, която още не си изпълнил както е недописана. А и даже в случай че командата е изпълнена, по-оптимално (от гледна точка на ергономичност и брой keystrokes) ми изглежда да я върна от историята (UP), да изтрия нужния брой директории (ALT+BACKSPACE) и да си напиша поправката.

Leave a Reply