Нещодавно я намагався переключитися з давнього користувача tcsh на bash, і я скаржився на додаткове натискання клавіш для видалення "слів" зліва, тому я розглядав можливість зміни поведінки в bash, щоб зробити це більше схожим на tcsh так що мені не доведеться переробляти свої 18 років м’язової пам’яті. Я зараз намагаюся з’ясувати:
Як змінити "межі слів" при escape delete
наборі. (Зверніть увагу, я маю на увазі 2 окремих натискання клавіш.)
У tcsh, коли я хочу видалити слово зліва, я повторю 2 натискання клавіш: escape delete. Я знаю, що bash використовує control-w, щоб вбити слово зліва, і я придумав, як зробити це ігнорування тире та підкреслення як межі слова (але моя м'язова пам'ять tcsh використовує control-w, щоб видалити все, що залишилося від курсору - bash's контроль-у). Ви можете зробити одне з будь-якого:
bind '\C-w:unix-filename-rubout'
або
stty altwerase
(хоча я ще не знаю, чи є це непередбачувані побічні ефекти - я все ще просто намагаюся розібратися). Кожен з них дозволяє control-w видаляти через тире та підкреслення, але я не знаю, як вони відрізняються інакше.
Однак я був здивований, що escape delete
ключова послідовність в обох цих випадках все ще зупинялася на тире та підкресленнях. Я намагався змінити це за допомогою різних команд прив'язки, таких як:
set bind-tty-special-chars Off
set bind-tty-special-chars On
bind '\e\C-h:unix-filename-rubout'
bind '\e\C-?:unix-filename-rubout'
Але жодна з них не змінює слова граничної поведінки escape delete
.
Деякі зауваження: я дійсно не знаю, що escape delete
робиться в моєму терміналі - тобто що він надсилає до bash. Якщо я це роблю control-v escape
, я бачу ^[
. Якщо я це роблю control-v delete
, я бачу ^?
. Я використовую Terminal.app на macOS. У мене встановлений ключ видалення, щоб не надсилати контроль-h, оскільки він не веде себе так, як я очікував у кожному контексті. У мене також не встановлено параметр як мета-ключ, оскільки я насторожився, щоб не порушити використання стрілок параметра та клацання параметра для переміщення курсору.