Як я можу згадати нумеровану історію для редагування?


17

Я часто шукаю зміни за допомогою history | grep 'string'

Я отримую список команд моєї історії разом з номером рядка історії), наприклад

history | grep 'git'

  755  git status
 1535  git push origin master
 1570  git merge origin/one-146
 1667  git reset --hard origin/master

Тепер я можу згадати та виконати команду за один раз !nnn, наприклад:

!755
git status
# On branch master
nothing to commit, working directory clean

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

Відповіді:


12

З тих пір я застосував ще один підхід до цього - використання ![line-number]:p

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

Я поєдную це з hgпсевдонімом ( alias hg='history | grep '), щоб згадати команди історії на основі тексту.

Приклад:

$ hg checkout

17140   git checkout README.rdoc
17143   git checkout master
17201   git checkout README.rdoc
17204   git checkout master
17923   git checkout .bashrc
18151   git checkout v311

Я використовую це на додаток до ctrl- r(пошук зворотної історії), тому що іноді я вважаю за краще одразу перелік усіх можливостей для даного рядка, а не просто вихід на 1 рядок, який ctrl- rпоказує. Після цього hg [string]я б зробив так, ![line-number]search_stringяк hg checkoutпоказано вище.


8

Якщо встановити histverify варіант , наприклад

shopt -s histverify

то всі підстановки історії виводяться на редагування, а не виконуються негайно. Тоді вам потрібно буде натиснути Enterдвічі замість одного разу після введення !755для виконання команди.

Ви можете натиснути довільний текст на список історії за допомогою history -s. Поєднайте це, fc -nlщоб перерахувати конкретний запис історії.

history -s "$(fc -nl 755 755)"

потім натисніть, Upщоб згадати, який зараз останній запис історії.


6

Ви можете шукати історію за допомогою Ctrl+R . Якщо запис історії тривалий час, використовуйте мишу (не клавіатуру, яка зупиняє пошук), щоб скопіювати та вставити частину команди для редагування.

Як прокоментував @rijsg, ви можете використовувати стрілки (ліворуч і праворуч) або еквівалентні клавіші, щоб зупинити пошук і почати редагування.


2
Будь-яка клавіша зі стрілкою або еквівалентна команда ( Ctrl-aнаприклад) зупинить пошук, залишаючи поточний запис історії в командному рядку, не виконуючи її. Цього може бути недостатньо, залежно від того, що хоче @Michael.
njsg

2

Якщо ви налаштуєте файл .bashrc для використання редактора vi в командному рядку, це зробить редагування командного рядка набагато менш складними.

По-перше, як тільки "set -o vi" увімкнено, ви можете просто натиснути "<esc> k" , потім продовжуйте натискати " k", щоб перейти до файла історії так, як це було, якщо ви проходите повз записи, використовуйте "j" спуститися .

ПРИМІТКА: при використанні vi є два режими: команда та редагування, щоб увійти в режим команд, натисніть клавішу ESCAPE KEY ONCE, потім вставити a, A, i, I тощо.

Простий килимок курсору in vi: зліва = h, вниз = j, вгору = k, праворуч = l http://linuxmeister.net/vi/vi-Summary.jpg

Я додав усі записи, необхідні для виконання цієї роботи за адресою: http://linuxmeister.net/Notes/bashrc-simple.html

Отже, виходячи з дуже корисної інформації, поданої вище, я зміг використати "історію" та ЗНАЙТИ рядок із "історії", БЕЗ виконання її. (ДЯКУЄМО ЗА ТЕСТУ!)

якщо вказано shopt та історія підтвердження "off" a! ВИКОНАЙТЕ негайно,

якщо ви додали до свого .bashrc або ввели: shopt -s histverify , тоді a! дозволяє редагувати, наприклад:

history
    1  more .bashrc
    2  history
    3  shopt
    4  . ./.bashrc
    5  shopt | grep hist
    6  history
    7  alias
    8  history
    9  shopt
   10  history

->! 5

5, наступна команда з'являється, але НЕ виконує

### якщо histverify "увімкнено".

shopt | grep hist
cmdhist         on
histappend      on
histreedit      off
histverify      on
lithist         off

Пам'ятайте, що Лінус та Річард створили інструменти Linux та GNU, щоб скористатися UNIX. Редактор vi (створений Біллом Джоєм) - це один з найкращих інструментів для оволодіння, як це відбувається у ВСІМ дистрибуції UNIX та Linux.

Усі інші редактори командного рядка потрібно завантажити та вимагати додаткового програмного забезпечення. Використовувати графічний інтерфейс у Linux (крім Firefox, Thunderbird та OpenOffice) - це як буксирування вашого Дизеля 4x4 з жуками VW 1968 року ... воно буде працювати, але це, безумовно, не має сенсу.

Згадайте, що Керніган сказав про графічний інтерфейс, "те, що ви бачите, все, що ви отримуєте".


-1
echo !number

потім натисніть стрілку вгору, видаліть слово echoта відредагуйте решту; натисніть Enter, щоб виконати.

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