Shell с улучшенными возможностями редактирования

Оболочки (по крайней мере, я знаю) имеют действительно плохие возможности редактирования команд.

Например:

Я не могу указать курсор на любую точку команды. Я не могу выбрать и переместить / удалить / заменить текст в команде.

В настоящее время они настолько отвлекают, я использую gedit для редактирования команд, прежде чем вставлять их в терминал.

Есть ли какое-нибудь решение, которое хорошо для них?

1
задан 6 December 2015 в 18:50

3 ответа

Вы можете отредактировать пустую или частично типизированную команду в выбранном вами редакторе, установив EDITOR в выбранный вами редактор и нажав CTRL + X + E или CTRL + X / CTRL + E, которые откроют текущий редактирование строки в EDITOR;

Например, установка EDITOR на gedit сделает CTRL + X + X и CTRL + [d3 ] E / CTRL + CTRL откройте текущую строку в Gedit.

Чтобы сделать это постоянным решением, вы можете установить EDITOR в ~/.bashrc.

Это позволяет использовать даже полнофункциональный графический текстовый редактор для редактирования команды; для запуска отредактированной команды просто сохраните и закройте документ.

В Zsh можно включить такую ​​же функцию, добавив следующее к ~/.zshrc:

autoload -U edit-command-line
zle -N edit-command-line
bindkey '^xe' edit-command-line
bindkey '^x^e' edit-command-line
7
ответ дан 23 May 2018 в 15:15
  • 1
    Это также можно вызвать командой fc, если задана переменная FCEDIT. Хороший ответ! – Sergiy Kolodyazhnyy 7 December 2015 в 15:17
  • 2
    @Serg Спасибо, однако fc открывает предыдущую команду (которая даже опережает определенным образом). Я не знал об этом, спасибо! – kos 7 December 2015 в 15:28

Терминалы сами не имеют возможности редактирования текста. Терминалы предоставляют область текста и соединяют клавиатуру с чем-то. Но что-то, что вы запускаете внутри терминала, определяет, что он может сделать.

Терминалы , такие как bash, как правило, это первое, что вы найдете для запуска внутри терминала , Поскольку оболочки работают на основе команд, вы можете редактировать текущую команду. bash обеспечивает превосходное редактирование команд по сравнению с оболочкой Bourne или csh или ksh, но это вряд ли то, что вы хотели бы отредактировать даже в коротком рассказе.

Текстовые редакторы - одна из команд, которые вы можете вызывать в оболочке. Ведущими примерами являются и emacs. vim или emacs даст вам возможность редактировать практически все.

Таким образом, решение состоит в том, чтобы лучше понять, что делают эти инструменты и что нужно сделать, и выбрать текстовые редакторы [!]. d8].

6
ответ дан 23 May 2018 в 15:15
  • 1
    Я знаю разницу, но можно ли что-то сделать для улучшения редактирования команды bash? – UniversallyUniqueID 6 December 2015 в 18:51
  • 2
    поместить его в сценарий? – chicks 6 December 2015 в 21:22

Обычно терминалы позволяют выбирать текст с помощью мыши, но оболочка не узнает об этом. К сожалению, ни bash, zsh, fish, ни es не могут поддерживать редактирование на основе мыши. Я думаю, что для этого потребуется больше контроля над терминалом.

Однако (и это немного растягивается), если вы открываете Vim или GVim, а затем вводите команды оболочки, используя: [ ! d1]

:!...

, тогда вы можете щелкнуть мышью, чтобы перейти в любую точку линии. (Сначала вам нужно будет :set mouse=a, если это еще не включено.) Клавиши редактирования в этом режиме можно увидеть с помощью :help cmdline-editing

. У Vim также есть довольно мощный режим истории команд, который может быть достигнутый путем удара q :. Оттуда вы можете вытаскивать, удалять и вставлять команды Vim в обычном режиме. В этом режиме вы можете щелкнуть мышью , чтобы перейти в любую желаемую строку (нажав d).

Существенным препятствием здесь является то, что Vim не на самом деле сохранить сеанс живой оболочки. Каждая выполняемая вами команда будет выполняться в дочернем процессе. Таким образом, любые изменения, внесенные в переменные среды или параметры оболочки дочерним процессом, будут потеряны.

Тем не менее, вы можете изменить переменные среды из в процесс Vim и использовать их из Командная строка Vim, и они будут даже экспортированы в дочерние процессы:

:let $FOO="bar"        " the $ and the quotes are mandatory here

:echo $FOO             " Vim's own echo command
bar

:!echo "$FOO"          " Passing the variable to a shell command
bar

:!bash                 " Opening a child shell
$ echo "$FOO"
bar

Итак, если вы готовы притвориться, что Vim на самом деле какая-то странная оболочка, то вы можете наслаждаться ее расширенными функциями редактирования! Вероятно, самым большим недостатком является то, что вам придется начинать каждую команду, набирая либо :!, либо q:

О, и, кстати, если вы хотите получить вывод команды оболочки в текущий Vim, вы можете сделать это вот так (но будьте осторожны, он будет сжимать вашу текущую строку):

:,!ls
0
ответ дан 23 May 2018 в 15:15

Другие вопросы по тегам:

Похожие вопросы: