Shell with better editing capabilities

Shells (at least what I know) have really bad command editing capabilities.

For example:

  • I can't point the курсор to any point of the command.
  • I can't select and backspace/delete/replace text in the command.

Currently these пахал so distracting, I использовал gedit to edit commands before pasting them to the терминал.

Is there any solution that's good for these?

11
задан 6 December 2015 в 07:50

4 ответа

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

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

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

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

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


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

13
ответ дан 23 November 2019 в 03:54

Вы можете редактировать пустую или частично набранную команду в редакторе по вашему выбору, установив 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
7
ответ дан 23 November 2019 в 03:54

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

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

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

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

6
ответ дан 23 November 2019 в 03:54

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

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

:!...

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

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

Важным предупреждением здесь является то, что Vim на самом деле не поддерживает сеанс live shell. Каждая выполняемая вами команда будет выполняться в дочернем процессе. Поэтому любые изменения, внесенные в переменные среды или параметры оболочки дочерним процессом, будут потеряны.

Тем не менее, вы можете изменить переменные среды из внутри процесса 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 November 2019 в 03:54

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

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