Использовать vim в конвейере для сброса текущей строки при выходе на стандартный вывод?

327
Brad Parks

Могу ли я сделать что-то вроде этого:

$ ls | vim | xargs ... 

а vim передает stdout какие-либо строки, которые были визуально выбраны при выходе?

Если было бы проще просто сбросить «текущую строку», то это тоже сработало бы.

Я, конечно, открыт для передачи некоторых аргументов командной строки в vim или пользовательского vimrc, чтобы он работал.

ПРИМЕЧАНИЕ: я хочу использовать это, чтобы позволить мне выбрать любой фрагмент текста, будь то полная строка или части одной строки, в интерактивном режиме в командной строке с использованием VIM.

1

2 ответа на вопрос

2
Ingo Karkat

Вы в choose.shосновном переопределяете команду vipe( vi pipe ) из moreutils :

SYNOPSIS command1 | vipe | command2  DESCRIPTION vipe allows you to run your editor in the middle of a unix pipeline and edit the data that is being piped between programs. Your editor will have the full data being piped from command1 loaded into it, and when you close it, that data will be piped into command2. 
Наверняка! Хорошая точка зрения. Единственное реальное отличие, которое я вижу, это то, что vipe заставляет вас редактировать контент, удаляя все, кроме того, что вы хотите. Мой подход выше позволяет мне визуально выбрать текст, который я хочу, нажать F4, и это то, что отправляется на вывод - так что, на мой взгляд, меньше работы с клавиатурой. Я действительно сталкивался с этим сценарием, когда искал информацию vipe. Brad Parks 5 лет назад 0
1
Brad Parks

Я нашел решение, которое работает с Vim довольно легко, так что теперь я могу делать такие вещи

$ ls | choose.sh | xargs .... 

Это запускает vim, позволяет мне визуально выбрать нужный текст и передает выбранный текст в стандартный вывод при нажатии F4. Обратите внимание, что я мог бы также просто отредактировать буфер и изменить его так, чтобы он содержал только текст, который я хочу выделить, сохранить и закрыть, и содержимое буфера будет передано в стандартный вывод. Так что вся мощь vim «выбирать» что-то в командной строке в интерактивном режиме!

Я могу сделать это, используя vim, добавив следующее к моему .vimrc(выловлено здесь )

map <F4> "*yggdG"*pZZ 

и сохранение следующего в скрипт (зацепка отсюда )

choose.sh

#!/bin/bash # create temporary file TMPFILE=`mktemp /tmp/vipe.bashXXXXXXXX` cat > $ vim $ < /dev/tty > /dev/tty cat $ rm $