Фильтрация с !
всегда линейная.Ваше решение с c
и регистр выражений - отличный способ решить эту проблему.Вы только забыли передать ввод в system()
, который является вторым необязательным аргументом.
Поскольку вы только что изменили выбранный текст, он автоматически вошел в регистр "
.Все, что вам нужно сделать, это захватить его обратно и передать в систему с помощью getreg()
:
c<C-R>=system('base64 -D', getreg('"'))
Обратите внимание, что base64
может повторить символ новой строки в конце.Если вы хотите удалить его, либо оберните все это в trim()
, новую функцию в Vim 8, либо используйте [:-2]
:
c<C-R>=trim(system('base64 -D', getreg('"')))
c<C-R>=system('base64 -D', getreg('"'))[:-2]
Это сокращение для [0:-2]
, что означает захватвсе, начиная с символа 0 и заканчивая вторым последним в полученной строке.
Если вы часто используете ее, рассмотрите возможность создания визуальной карты:
vnoremap <leader>d c<C-R>=system('base64 -D', getreg('"'))[:-2]<CR>