Як редагувати попередні рядки в команді з декількома рядками в Bash?


24

Як ввести команду, яка охоплює кілька рядків у Bash, як я можу редагувати попередні рядки? Я користувач Linux Mint (Lisa), що використовує термінал GNOME.

Наприклад, скажімо, я набираю:

$ echo "foo bar
> baz
>

І тоді, коли я збираюся набрати третій рядок команди, раптом зрозумію, що хочу, щоб "foo" і "bar" знаходилися на окремих рядках. Як би я перемістив курсор між "foo" і "bar" таким чином, щоб я міг натиснути клавішу enter і розмістити їх на окремих рядках?

(Це не так просто, як ви могли подумати. Стрілка вгору не працює, а також Ctrl-P. Тому, будь ласка, спробуйте це перед публікацією! Дякую!)


Прийнята відповідь говорить, що рішення немає, але є. Дивіться нижче
cdosborn

Відповіді:


16

Це, на жаль, залежить bashне від терміналу. Ваші варіанти:

  1. Використовуйте крапки з комою замість нових рядків, хоча навіть тоді ви не можете рухатись вгору по екрану вгору, але потрібно використовувати символи або слова з рухом команд. (Як не дивно, zshпринаймні дозволяє вам переміщуватися в складеній команді під час редагування історії, тільки не в межах поточної команди.) Іноді fc(що перекидає вас у ваш редактор за допомогою попередньої команди) - це найпростіший спосіб обробляти складені команди.

  2. Якщо ви використовуєте Bash, використовуйте таку комбінацію клавіш:

    ctrl x e

    Це відкриє команду, над якою ви працюєте за допомогою свого текстового редактора. Збережіть файл і закрийте. (Я знайшов команду на презентації Shell Hater .) У користувачів Zsh є така альтернатива .


1
На сторінці bash man пояснюється, як змінити редактор, який використовується: edit-and-Execute-command (C-xC-e) - викликати редактор у поточному командному рядку та виконувати результат як команди оболонки. Bash намагається викликати $ VISUAL, $ EDITOR та emacs як редактор у такому порядку.
Метью

Є рішення, не відкриваючи редактора.
cdosborn

Технічно це не до удару - але до бібліотеки "readline", яку bash використовує для отримання входів.
Крістіан Геренц

11

Рішення полягає в тому, щоб ніколи не вводити команду, поки багаторядковий не буде правильним, просто введіть: CtrlvCtrlj коли ви хочете перейти до наступного рядка. Metabщоб повернути слово назад.

рішення

заслужите відповідь @ rici


4

Як не дивно, Ctrl+Cце те, що ви шукаєте.

коли ви на

$ echo "foo bar
> baz
>

просто натисніть Ctrl+C(відредагований командний рядок буде призупинено) та натисніть Up(попередня історія). Ваше повідомлення буде: (враховуйте відсутність>)

$ echo "foo bar
baz

Тепер ви можете пересуватися Left Rightрівномірними стрибками.

Існує лише одна примха. Ви повинні бути на останньому символі, щоб додати ще один рядок, тому перейдіть, щоб редагувати існуючі рядки (перейдіть до початку Ctrl+A), натисніть, Enter якщо цього достатньо, або перейдіть до кінця ( Ctrl+E), щоб додати ще рядки Enter. Ще один недолік полягає в тому, що Ctrl+_(скасувати) лише відновлює зміни, які були останнімиCtrl+C


-2

Скопіюйте команди та вставте їх у блокнот, а потім відформатуйте їх звідти. Після цього ви можете скопіювати свої команди назад в термінал.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.