Запуск нижньої частини з середини поточної команди


16

Я часто знаходжу себе в цьому сценарії. Я в середині введення команди, і мені потрібно перевірити ще щось, перш ніж виконати її.

Чи є спосіб відкрити якусь підшару з моїм поточним входом, доки запам'ятовується, тоді, коли я виходжу з цієї підкашти, я повертаюся туди, де був?

$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>

Я використовую zsh


2
Чому б просто не відкрити інше вікно терміналу?
Бармар

@Barmar Для мене я не використовую графічний інтерфейс для більшості моїх Linux-систем, тому мені доведеться перемикати TTY. Що означає, що мені доведеться повторно засвідчити автентифікацію. Наведені нижче варіанти набагато ефективніші.
Захарій Брейді

3
Ви можете використовувати screenабо tmuxотримати кілька віртуальних терміналів на консолі.
Бармар

Відповіді:


16

Існує комбінація клавіш, EscQяка зберігає буфер команд і дозволяє вводити нову команду. Після запуску команди буфер містить те, що ви ввели раніше. Якщо вам доведеться виконати іншу команду перед закінченням, ви можете ввести EscQще раз.

(Я не намагався відкрити нижню частину корпусу після натискання EscQ.)

Дивіться сторінку http://zsh.sourceforge.net/Intro/intro_10.html і шукайте "esc-q"


Це саме те, що я хотів, спасибі велике! Я міг би змусити його запустити вкладену оболонку замість повернення відразу, але для мого використання повернення відразу працює чудово.
Panayiotis

19

Зазвичай я використовую Ctrl+, Uщо стирає поточний рядок і зберігає його в буфері. З цього часу я роблю все, що мені було потрібно до цього mylongcommand. Потім, коли я готовий, я використовую Ctrl+, Yщоб вставити mylongcommandназад у своєму підказку.

Запам’ятайте наполовину набрану команду, поки я щось перевіряю


7

Моє рішення цього - це, безумовно, низькотехнологічний і незграбний, але покладається на ключові послідовності, напевно, ви вже знайомі: Hit Ctrl+ A, то #, потім ENTER.

Це #призводить до того, що ви вставляєте a на початку рядка, роблячи таким чином коментар, потім виконуючи його, тим самим відсуваючи його в історію команд. Потім ви можете ввести свою допоміжну команду, потім прокрутити вгору історію команд до коментованої команди, видалити #та виконати команду за потребою.


Ви повинні натиснути кнопку "додому" на клавіатурі, це економить 1 натискання клавіші, а енергію, необхідну для її фактичного натискання
Ferrybig

@Ferrybig - так, це добре, хоча для моєї щоденної клавіатури - це MacBook Pro, який не має клавіші ДОМАШНЯ . ПОЧАТОК еквівалент FN + Стрілка вліво , але що прокручується до верхньої частини терміналу.
Цифрова травма

2

Я набираю Ctrl+, Zщоб "призупинити" команду, яку я набираю, і набираю іншу команду. Після того як я запустив цю команду (або скасував її з Ctrl+ C), призупинена команда повертається до видання (навіть запам'ятовуючи положення курсору). В якості додаткової зручності, якщо командний рядок порожній, коли я набираю Ctrl+ Z, ключ викликає bgвбудований натомість (тому double Ctrl+ Zнадсилає запущену команду безпосередньо на задній план).

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

(Раніше опубліковано в « Запам’ятати» напівнаписану команду, тоді як я перевіряю те, що в основному має рішення для bash, де ви не можете зробити нічого такого зручного. Це трохи причудливіша версія вбудованої прив’язки M-qдоpush-line .)

Це не запускає підзарядку: команда, яку ви вводите після "призупинення" попередньої, працює в одній оболонці. Це дозволяє вам робити такі речі, як зміна поточного каталогу, якщо ви зрозуміли після введення команди, що ви мали намір запустити її в інший каталог. Якщо ви хочете запустити новий екземпляр оболонки, ви можете запустити zshз ключа прив'язки, але я не думаю, що це особливо корисно.

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