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

10

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

Например:

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

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

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

    
задан Bharadwaj Raju 06.12.2015 в 08:44
источник

4 ответа

12

Баш на самом деле довольно хорош в этом. Вам просто нужно узнать его ярлыки. Например (в режиме emacs по умолчанию):

  • Ctrl + A : перейти к началу строки.
  • Ctrl + E : перейдите в конец строки.
  • Ctrl + B : переместить один символ назад.
  • Ctrl + F : переместить один символ вперед.
  • Alt + B : переместить одно слово назад.
  • Alt + F : переместить одно слово вперед.
  • Ctrl + K : удалить (вырезать) все до конца строки.
  • Alt + D : удалить (вырезать) слово после курсора.
  • Ctrl + W : удалить (вырезать) слово перед курсором.
  • Ctrl + Y : yank (вставить) то, что находится в буфере (что вы вырезали с помощью Ctrl + K или Alt + D например)

И есть еще много. Прочтите man readline , чтобы узнать, что еще доступно. Вы можете назначить разные ярлыки, разместив их в ~/.inputrc . Например, чтобы сделать Ctrl + Left вернуться к одному слову и Ctrl + Вправо перейдите на одно слово, добавьте это к вашему ~/.inputrc :

"\e[1;5D": backward-word 
"\e[1;5C": forward-word

Чтобы узнать, что означают эти странные коды, нажмите Ctrl + V , а затем нажмите клавишу, которую вы хотите использовать. Если вы попытаетесь с помощью Ctrl + Right , вы увидите ^[[1;5C . Замените ^[ на \e в ~/.inputrc .

Вы также можете посмотреть другие оболочки. Популярные «современные», многофункциональные оболочки включают в себя:

ответ дан terdon 07.12.2015 в 10:30
источник
7

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

Например, установка EDITOR в gedit сделает CTRL + X + E и CTRL + X / CTRL + E откройте текущую строку в 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
    
ответ дан kos 07.12.2015 в 10:58
6

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

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

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

Итак, решение состоит в том, чтобы лучше понять, что делают эти инструменты и что нужно сделать, и выбрать правильный для работы .

    
ответ дан chicks 06.12.2015 в 14:29
0

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

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

:!...

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

У Vim также есть довольно мощный режим истории команд, который может быть достигнут нажатием q : . Оттуда вы можете вытаскивать, удалять и вставлять команды Vim в обычном режиме. В этом режиме вы можете получить select-with-mouse и затем удалить функцию, которую вы хотите (нажав 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
    
ответ дан joeytwiddle 30.05.2016 в 14:29