2012-07-26 2 views
89

Недавно я переключился с Bash на Zsh на Ubuntu, и я очень доволен этим. Однако есть что-то, что я действительно пропустил, и я не нашел, как добиться того же.Комментарии в командной строке Zsh

В Bash, всякий раз, когда я печатал длинную команду и заметил, что я должен был бежать что-то еще до того, я просто должен был прокомментировать его, как в следующем:

[email protected]> #mysuperlongcommand with some arguments 
[email protected]> thecommandIhavetorunfirst #and then: then up up 
[email protected]> #mysuperlongcommand with some arguments #I just need to uncomment it! 

Однако это довольно рецидивирующий ситуация не так легко обращаться как с zsh, учитывая #mysuperlongcommand будет работать как таковой (и в результате:. zsh: command not found: #mysuperlongcommand

ответ

132

Только что начал опробовать zsh, я столкнулся с этой проблемой. Вы можете сделать setopt interactivecomments, чтобы активировать комментарии в стиле bash.

+0

Это правильный ответ! Благодаря! –

+1

Вы также можете сделать 'set -k', если он просто один. Но я бы использовал строку 'setopt' из этого ответа в моем zshrc –

+9

Есть ли причина, по которой это поведение не по умолчанию? – naught101

18

Я считаю себя делать это часто, как хорошо, что я делаю, вырезать длинную команду, выполнить команду, которая нуждается. сначала пойти, а затем снова вставить длинную команду. Это легко: CTRL + U вырезает текущую команду в буфер, CTRL + Y вставляет его. Работает в zsh и bash.

+0

хорошее обходное решение, thx :) – Rolf

+0

ну, на самом деле, мой путь - это обходное решение, в то время как ваше решение лучше всего подходит;) – Rolf

+4

Это не должно быть принятым ответом. Ниже следует решение, в котором говорится, что нужно использовать «setopt interactiveivecomments». Причина этого в том, что если вы просто вырезаете текущую команду, то она не находится в вашей истории zsh, а также вы не можете легко использовать вырезание и вставку при вводе новой команды без перезаписи команды, которую вы пытались спасти. – Douglas

34

Я использую

bindkey "^Q" push-input 

Из инструкции ЗША:

Нажмите все многострочный ток построить на стек буфера и возврат к верхнему уровню (PS1) оперативного. Если текущая конструктор синтаксического анализа состоит только из одной строки, это точно так же, как и для push-line. В следующий раз, когда редактор запустится или выйдет с помощью get-line, конструкция будет выскользена из верхней части стека буферов и будет загружена в буфер редактирования.

Так это выглядит следующим образом:

> long command 
Ctrl+Q => long command disappears to the stack 
> forgotten command 
long command reappears from stack 
> long command 

Кроме того, если вы установите INTERACTIVE_COMMENTS вариант (setopt INTERACTIVE_COMMENTS), вы будете иметь возможность использовать комментарии в интерактивных оболочках, как вы привыкли.

+0

Мне нравится ваш вариант, но я не могу заставить его работать :(Есть ли способ, которым я должен написать привязку в файле, или это всего два символа,^и Q? Моя команда удалена, но я не могу знаете, как заставить его снова появляться на входе. –

+1

@Mihnea, если команда исчезает, кажется, что push-input работает. Он должен появиться при выполнении следующей команды или просто нажать клавишу ввода. Не делает это? –

+0

Silly мне хотелось бы нажать на стрелку. Спасибо, отличный совет! –