Быстрый способ редактировать n-ю строку предыдущего вывода команды - PullRequest
5 голосов
/ 30 ноября 2011

Я часто замечаю, что выполняю рабочий процесс, подобный следующему:

$ find . |grep somefile
./tmp/somefile.xml
./test/another-somefile.txt

(обзор результатов)

$ vim ./tmp/somefile.xml

Теперь было бы неплохо, если бы был какой-то удобный способвыходные данные команды find и передают ее vim.

Лучшее, что я придумал, это:

$ nth () { sed -n $1p; }
$ find . |grep somefile
./tmp/somefile.xml
./test/another-somefile.txt

(обзор результатов)

$ vim `!!|nth 2`

Мне было интересно, есть ли другие, может быть, более симпатичные способы сделать то же самое?

Чтобы уточнить, я хочу получить удобный способ извлечь n-ю строку из ранее запущенной команды, чтобы быстро открыть этот файл для редактирования вvim, без необходимости вырезать и вставлять имя файла с помощью мыши или вкладки, чтобы пройти путь к файлу.

Ответы [ 5 ]

4 голосов
/ 30 ноября 2011

способ 1: не передавать точный файл в vim, а весь вывод.выберите файл в vim

в настоящее время вы работаете в два этапа:

1 - запустите find / grep ... cmd

2 - vim !!....

, если вы уверены, что хотите использовать vim, чтобы открыть один или несколько файлов из результатов поиска.вы можете попробовать:

find. (with grep if you like)  |vim -

, тогда у вас есть весь вывод в vim, теперь вы можете использовать vim magic, чтобы переместить курсор к файлу, который вы хотите редактировать, затем нажмите gf.(Я делаю это иногда)

способ 2: уточните свое регулярное выражение в вашей находке (или grep), чтобы получить единственный файл, который вы хотите отредактировать.это совсем не сложно.тогда вы можете просто vim !!.

ваш nth () хорош.однако представьте, что в выводе 30 строк, а ваш файл находится в строке № 16. как вы считаете это?конечно, вы можете добавить |nl в конце, тогда вы не можете напрямую использовать !!больше ..

только мои 2 цента

1 голос
/ 30 ноября 2011

Изменено после вашего комментария.Не уверен, что это "удобно", хотя ..

command | tail -n3 | head -n1 | xargs vim
0 голосов
/ 30 ноября 2011

Вы почти сделали это! *

pearl.251> cat file1
a b c d e f pearl.252> find . -name "file*"
./file1
./file2
./file3
./file4
./file5
./file6
./file7
pearl.253> vi `!!|awk 'NR==1'`

последняя строка здесь будет открывать файл1 в vi.

0 голосов
/ 30 ноября 2011

Если вы хотите интерактивный обзор, возможно, вы можете использовать что-то вроде этого:

TMP_LIST=""; for i in `find . | grep somefile`; do echo $i; read -p "(y/n)?"; [ $REPLY == "y" ] && TMP_LIST="$TMP_LIST $i"; done; vim $TMP_LIST
0 голосов
/ 30 ноября 2011

Может быть, это то, что вы ищете?

find . -name "*somefile*" -exec vim -p {} \;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...