1

В командной строке bash можно просмотреть историю команд с помощью клавиш со стрелками вверх и вниз. (Я также часто использую CTRL+R.) Возможно ли это сделать без замены строки символов слева от курсора.

Например, я мог найти два файла, используя ls:

$ ls ../../blah/foo/bar/CMakeLists.txt

$ ls /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h

Теперь я хотел бы добавить второй путь в первый файл. Я начинаю с нажатия стрелки вверх; затем CTRL+A; и удалить ls с самого начала, используя delete:

$ /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h

Теперь я хотел бы использовать >>, чтобы добавить этот путь в файл CMakeLists.txt; который я позже отредактирую из текстового редактора. Команда, которую я хотел бы создать:

$ echo /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h >> ../../blah/foo/bar/CMakeLists.txt

Было бы неплохо, если бы я мог прокручивать историю в интерактивном режиме, чтобы найти путь CMakeLists.txt, оставляя часть .../c++config.h нетронутой.

Одна возможность будет использовать! и! -N указатели событий, но если возможно, я бы предпочел что-то интерактивное; такие как стрелки вверх и вниз; или CTRL+R.

2 ответа2

2

(Я буду использовать номенклатуру ключей, используемую в документации Readline, а именно то, что ключ управления представлен символом C , поэтому C-k - это CTRL-K)

Найдите первый с C-r , затем C-d или Del 3 раза, чтобы удалить ls . Затем C-k чтобы убить (вырезать) остальную часть строки. Затем C-r чтобы найти другой. C-e чтобы перейти к концу строки. Тип >> . Затем C-y дернул (вставил) по первому пути.

Итак, C-k (kill) и C-y (yank), вероятно, ваши лучшие инструменты для этой работы.

1

Если вы знакомы с vi, вы можете установить bash в режим vi с помощью команды set -o vi а затем использовать обычные команды vi.

Например, в вашем случае f.y$ чтобы вернуть путь в первой командной строке, затем перейти к следующей строке с помощью j , набрать $p чтобы добавить ранее полученный текст в конце строки и, наконец, очистить строку с помощью 0cwecho<esc>f a>><esc>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .