7

В , если у меня есть команда в строке, и я нажимаю Alt - # (с курсором в любом месте строки), он добавляет # в начало строки, комментируя ее, «выполняет» ее (что делает ничего, так как это теперь закомментировано), и помещает это в историю. Это действительно полезно, когда я набираю часть или всю команду и понимаю, что мне нужно сначала запустить другую команду, а потом вернуться к ней.

Как я могу сделать ту же операцию в ? Комментирование не важно: все, что меня волнует, это то, что команда не выполняется сейчас, но может быть извлечена из истории позже.

3 ответа3

7

Вариант четвертый (как ответ на название вопроса, а не его объяснение ;-):

  • print -S "this line goes to the history"

Выдержка из zshbuiltins(1): " print -S Поместить результаты в список истории вместо стандартного вывода. В этом случае допускается только один аргумент; он будет разбит на слова, как если бы это была полная командная строка оболочки. Эффект подобен чтению строки из файла истории с активной опцией HIST_LEX_WORDS. "

6

Три варианта:

  • У zsh по умолчанию есть сочетание клавиш Alt + Q, которое выдвигает текущую строку.

    Используйте это так:

    1. Введите команду.

    2. Нажмите Alt + Q.

    3. Выполнить другую команду.

    4. команда появится снова.

    Технически, это не помещает это в историю. Также, если вам нужно выполнить другую команду перед командой, вы должны снова нажать Alt + Q.

  • Также по умолчанию сочетания клавиш Ctrl + U и Ctrl + Y обрезают и вставляют (вставляют) текущую строку.

    Используйте их так:

    1. Введите команду.

    2. Нажмите Ctrl + U.

    3. Выполнить другую команду.

    4. Нажмите Ctrl + Y.

    5. команда появится снова.

    Это будет работать и в bash, и он использует свой собственный буфер обмена, то есть содержимое буфера обмена, управляемое Ctrl + (Shift +) C / V и select / middle-click, останется неизменным.

  • Наконец, что не менее важно, вы можете навсегда включить комментарии в командной строке, выполнив

    echo setopt interactivecomments >> ~/.zshrc
    

    Alt + # здесь не работает, но Ctrl + A / Home, #, Enter достигает того же результата.

Чтобы увидеть все доступные сочетания клавиш, выполните

bindkey
3

Виджетирование ответа @ mpy, добавьте это в свой .zshrc

to-history() { print -S $BUFFER ; BUFFER= }
zle -N to-history
bindkey 'œ' to-history

Примечание: œ это то, что я получаю на Mac для alt/option-q, настройте для своего терминала

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .