Оболонка з кращими можливостями редагування


11

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

Наприклад:

  • Я не можу вказати курсор на будь-яку точку команди.
  • Я не можу вибрати та повернути назад / видалити / замінити текст у команді.

В даний час вони настільки відволікають, я використовую gedit для редагування команд, перш ніж вставляти їх у термінал.

Чи є якесь рішення, яке для них добре?


3
Ви з'єднуєте термінал із оболонкою.
JdeBP

Відповіді:


13

Баш насправді досить хороший у цьому. Вам просто потрібно вивчити її ярлики. Наприклад (у режимі 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+ Rightперейти одне слово вперед, додайте це до свого ~/.inputrc:

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

Щоб дізнатися, що означають ці дивні коди, натисніть Ctrl+, Vа потім натисніть клавішу, яку ви хочете використовувати. Якщо ви спробуєте з Ctrl+ Right, ви побачите ^[[1;5C. Замінити ^[з \eв ~/.inputrc.


Ви також можете заглянути в інші снаряди. До популярних «сучасних», багатофункціональних оболонок відносяться:


З gnome-terminalви повинні використовувати ESCкнопки замість того , ALT щоб переміщатися по одному слову вперед і назад. . .. або перейти до терміналу, який не використовує Alt для меню програми. . . як xterm або sakura
Сергій Колодяжний

@ Серг не в моїй системі, дякую. Я не знаю, чи ви його встановили таким чином, чи це якийсь за замовчуванням налаштований Ubuntu. Esc часто використовується як синонім Alt, хоча.
тердон

Немає спільного скорочення буферів між терміналами.
Крейг Хікс

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

2
Цю fcкоманду можна також викликати, якщо встановлена ​​змінна FCEDIT. Хороша відповідь !
Сергій Колодяжний

1
@Serg Спасибі, однак, fcвідкриває попередню команду (яка певним чином навіть акуратніше). Я не знав про це, дякую!
kos

6

Термінали самі не мають можливості редагування тексту. Термінали надають область тексту та підключають клавіатуру до чогось. Але те, що ви запускаєте всередині терміналу, визначає, що він може зробити.

Такі снаряди , як bashправило, перше, що ви знайдете для запуску всередині терміналу. Оскільки оболонки працюють на основі команд, ви можете редагувати лише поточну команду. забезпечує відмінне редагування команд порівняно з оболонкою Bourne cshабо, kshнавпаки, навряд чи ви хочете відредагувати навіть коротку розповідь.

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

Тож рішення полягає в тому, щоб краще зрозуміти, що ці інструменти роблять і що потрібно робити, і вибрати потрібний для роботи .


Я знаю різницю, але чи можна щось зробити для покращення редагування команд bash?
UniversallyUniqueID

1
помістити його в сценарій?
пташенята

0

Зазвичай термінали дозволяють вибирати текст за допомогою миші, але оболонка про це не усвідомлює. Так , до жаль , ні bash, zsh, fishні esпідтримує редагування миші основі. Я думаю, щоб це зробити, їм потрібно було б взяти під контроль більше терміналу.

Однак (і це є трохи розтягнути) , якщо відкрити Вім або GVim, а потім ввести команди оболонки з допомогою:

:!...

то ви можете клацнути мишкою, щоб перейти до будь-якої точки лінії . (Вам потрібно :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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.