1

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

$ ls | vim | xargs ...

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

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

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

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

2 ответа2

2

Ваш 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.
1

Я нашел решение, которое работает с 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 > ${TMPFILE}
vim ${TMPFILE} < /dev/tty > /dev/tty
cat ${TMPFILE}
rm ${TMPFILE}

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