LINUX.ORG.RU

Как в vim'е применить фильтр к программно-выделенному куску текста.

 


0

1

Привет! По клавише вполняются команды

/\n\n./e<CR>:noh<CR>vip:'<,'>!python3 ./script.py<CR>
Хочу переписать через normal. С частью
:execute ":normal! /\n\n./e<CR>:noh<CR>"
:normal vip
всё нормально, часть текста выделяется, но применить скрипт не получается. Как с этим бороться?



Последнее исправление: dann (всего исправлений: 1)

Ответ на: комментарий от xaizek

Если такой строкой просто запустить скрипт, то всё нормально работает. А если вписать эту строку в функцию, то — нет. Обернуть во что-то нужно.

dann
() автор топика
Ответ на: комментарий от xaizek

Не работает: останавливается в визуальном режиме на выделенной первой строке, хотя просто с vip выделяет весь абзац — как и нужно.

Да

imap <F5> <ESC>:call Func()<CR>

dann
() автор топика
Ответ на: комментарий от dann

Так, вроде, должно работать:

normal vipV
'<,'>!python3 ./script.py
:normal просто обрывает режим, а визуальный режим, видимо, ставит метки только при выходе. Т.е. его надо покинуть явно, чтобы работало.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Теперь пишет, что файл како-то (/tmp/vud1MM5/277) не найден. Наверно, выделенный текст помещается в отдельный файл, который удаляется во время выхода из визуального режима.

Команда

normal vipgq

работает.

dann
() автор топика
Ответ на: комментарий от xaizek

В итоге получилось вот так

:call feedkeys( "/\\n\\n.\/e\<CR>:noh\<CR>vip:!python3 ./lts.py\<CR>" )

dann
() автор топика
Ответ на: комментарий от dann

Наверно, выделенный текст помещается в отдельный файл, который удаляется во время выхода из визуального режима.

Не, временный файл создаётся для перенаправления внешней команде.

normal vipgq

Это же параграф переформатирует. Можно так выйти:

execute "normal! vip\<esc>"
Хотя вообще странно, у меня работает.

xaizek ★★★★★
()
Ответ на: комментарий от dann

Да, я к тому, что к визуальному режиму это отношение не имеет. У меня вот это работает и не понятно, чего может быть ошибка:

function! Func()
    normal! vipV
    '<,'>!sed 's/e/E/g'
endfunction

inoremap <F5> <ESC>:call Func()<CR>

xaizek ★★★★★
()
:'{,'}!python3 ./script.py
anonymous
()
Ответ на: комментарий от xaizek

Ого! Заработало. Думал, я всё перебрал, код тоже почему-то работать отказывался. Огромное спасибо!

dann
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.