Shells (at least what I know) have really bad command editing capabilities.
For example:
Currently these пахал so distracting, I использовал gedit to edit commands before pasting them to the терминал.
Is there any solution that's good for these?
Bash на самом деле довольно хорош в этом. Просто необходимо изучить его ярлыки. Например (в значении по умолчанию emacs режим):
И существуют намного больше. Читать man readline
видеть, что еще доступно. Можно присвоить различные ярлыки путем размещения их в ~/.inputrc
. Например, для создания Ctrl + Покинутым возвращаются одно слово и Ctrl +, Право продвигается одно слово, добавляет это к Вашему ~/.inputrc
:
"\e[1;5D": backward-word
"\e[1;5C": forward-word
Для обнаружения, что означают те странные коды нажмите Ctrl + V и затем нажмите клавишу, которую требуется использовать. Если Вы попробуете Ctrl + Право, то Вы будете видеть ^[[1;5C
. Замена ^[
с \e
в ~/.inputrc
.
Вы могли бы также хотеть изучить другие оболочки. Популярные "современные", многофункциональные оболочки включают:
Вы можете редактировать пустую или частично набранную команду в редакторе по вашему выбору, установив EDITOR
в редакторе по вашему выбору и нажав CTRL kbd> + X kbd> + E kbd> или CTRL kbd> + X kbd> / CTRL kbd> + E kbd>, которые открывают текущее время отредактированная строка в EDITOR
;
Например, установка EDITOR
в gedit
приведет к CTRL kbd> + X kbd> + E kbd> и CTRL kbd> + X kbd> / CTRL kbd> + E kbd> открывают текущую строку в 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
Терминалы не имеют никаких способностей к редактированию текста самих. Терминалы обеспечивают область текста и подключают клавиатуру к чему-то. Но что-то , что Вы работаете в терминале, определяет то, что он может сделать.
Оболочки такой как bash
обычно являются первой вещью, которую Вы найдете для выполнения в терминале. Поскольку оболочки работают на основе команд, Вы только в состоянии отредактировать текущую команду. удар обеспечивает превосходный команда, редактируя по сравнению с Оболочкой Bourne или csh
, или ksh
все же это - едва что-то, с чем Вы хотели бы отредактировать даже рассказ.
Текстовые редакторы являются одной из команд, которые можно вызвать в оболочке. Ведущие примеры энергия и emacs. vim
или emacs
даст Вам способность отредактировать почти что-либо. Оба включают встроенные среды программирования для расширения их способностей к любой проблеме, с которой Вы сталкиваетесь.
, Таким образом, решение состоит в том, чтобы понять лучше, что делают эти инструменты, и предназначенный, чтобы сделать и выбрать исправляются один для задания .
Обычно терминалы позволяют выделять текст мышью, но оболочка не знает об этом. Так что, к сожалению, ни bash
, zsh
, fish
, ни es
не могут поддерживать редактирование на основе мыши. Я думаю, что для этого им нужно было бы получить больший контроль над терминалом.
Однако (и это немного растянуто), если вы открываете Vim или GVim, а затем вводите команды оболочки, используя:
:!...
, тогда вы можете щелкнуть ваша мышь, чтобы перейти в любое место в строке . (Сначала вам нужно будет :set mouse=a
, если это еще не включено.) Клавиши редактирования в этом режиме можно увидеть с помощью :help cmdline-editing
Vim также имеет довольно мощный режим истории команд, который может быть достигнут нажав q kbd> : kbd>. Оттуда вы можете вытащить, удалить и вставить, используя команды нормального режима Vim. В этом режиме вы можете получить select-with-mouse и затем удалить желаемую функцию (нажав d kbd>).
Важным предупреждением здесь является то, что 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