Як редагувати командний рядок у повноекранному редакторі в ZSH?


52

У режимі bash, використовуючи режим vi, якщо я натиснув Esc, vмій поточний командний рядок відкривається в редакторі, визначеному користувачем, $EDITORі я можу редагувати його в повноекранному режимі, перш ніж 'зберегти' команду, яку потрібно повернути в оболонку та виконати.

Як я можу досягти подібної поведінки в zsh? Натискання vв командному режимі призводить до того, що дзвінок не має явного ефекту, незважаючи на EDITORвстановлену змінну середовища.

Відповіді:


36

Дивіться edit-command-lineв zshcontrib.

bindkey -M vicmd v edit-command-line

13
(Просто для уточнення): Щоб увімкнути edit-command-line"віджет", вам знадобиться щось на зразок autoload edit-command-line; zle -N edit-command-lineодного з ваших файлів zsh init (див. Розділ Функції ZLE в zshcontribдокументації ).
Кріс Джонсен

Як ви активуєте це, як тільки воно на місці? Ключовий ключ у відповіді в стилі emacs має для мене сенс. Але я не можу знайти посилання на те, що bindkey -M vicmd vналаштовано.
Мат Шаффер

@MatSchaffer Те саме, що Bash: якщо ви перебуваєте у режимі vi, натисніть, <ESC>щоб увійти до командного режиму з режиму вставки, а потім vу візуальний режим ( Meta-vтой самий), або просто vякщо ви вже в командному режимі. Якщо ви використовуєте режим Emacs, типовою палітуркою є C-x C-e.
ефемієнт

1
Повторне використання клавіші v означає, що ви більше не можете використовувати візуальний режим, тому я віддаю перевагу перестановці на пробіл (який не робить нічого корисного в звичайному режимі) зbindkey -M vicmd ' ' edit-command-line
gib

37

Якщо ви віддаєте перевагу клавіатурним вкладкам Emacs:

autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line

9
^x^eЗв'язування , здається, за замовчуванням з поточним .oh-мій-ЗШ , що вкрай приємно.
quodlibetor

^ x ^ e саме те, що я шукав.
jmreicha

1
Аналогічна установка для Prezto, поки editorмодуль завантажений.
AL X X

23

Ви можете fcредагувати останню команду в історії. Це не те саме, що редагування тієї самої команди, але швидке натискання клавіші Enter робить вашу поточну команду останньою командою в історії.


14

Це повна конфігурація, яку я додав до свого, ~/.zshrcщоб отримати таку саму поведінку від bash:

export VISUAL=vim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line

Згідно з попередніми коментарями, це налаштовано за замовчуванням, якщо ви використовуєте Oh my ZSH або Prezto . Останнє вимагає editorзавантаження та / viабо vimвибору модуля для командного режиму.
AL X X

Я хотів би проголосувати, щоб це було прийнятою відповіддю, це вирішило моє питання з усією описаною конфігурацією. Дякую.
Лоран
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.