Выполнение 'base64 --decode' для выбора в vim - PullRequest
20 голосов
/ 21 октября 2011

Я пытаюсь выполнить 'base64 --decode' для фрагмента текста, выбранного в визуальном режиме, но команда base64, кажется, передает всю строку, а не только выбранный мной выбор.

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

:'<,'>!base64 --decode

Как передать только выбранный фрагмент строки в base64 --decode?

Заранее спасибо

Ответы [ 5 ]

19 голосов
/ 21 октября 2011

Если текст для передачи в команду оболочки возвращен в регистр (например, в неназванный регистр), можно использовать следующую команду:

:echo system('base64 --decode', @")

Возможно комбинирование копированиявыделенный текст и выполнение команды за один шаг с использованием отображения в визуальном режиме.

:vnoremap <leader>64 y:echo system('base64 --decode', @")<cr>

Отображение можно изменить, чтобы заменить выбранный текст выводом команды оболочки с помощью регистра выражения.

:vnoremap <leader>64 c<c-r>=system('base64 --decode', @")<cr><esc>
8 голосов
/ 25 мая 2015

Вместо этого вы можете использовать Python, который должен работать.

Выберите строки, которые вы хотите декодировать в визуальном режиме ( V ), затем выполните следующую команду:

:'<,'>!python -m base64 -d
4 голосов
/ 21 октября 2011

Если вы хотите заменить текст выводом base64, используйте что-то вроде

:vnoremap <leader>64 y:let @"=system('base64 --decode', @")<cr>gvP
0 голосов
/ 20 января 2017

Вот скрипт, который использует Python и модуль base64 для обеспечения команд base64 декодирования и кодирования. Также было бы довольно просто поддерживать любую другую программу base64, если она читает из stdin - просто замените python -m base64 -e на команду кодирования и python -m base64 -d на команду декодирования.

function! Base64Encode() range
    " go to first line, last line, delete into @b, insert text
    " note the substitute() call to join the b64 into one line
    " this lets `:Base64Encode | Base64Decode` work without modifying the text
    " at all, regardless of line length -- although that particular command is
    " useless, lossless editing is a plus
    exe "normal! " . a:firstline . "GV" . a:lastline . "G"
    \ . "\"bdO0\<C-d>\<C-r>\<C-o>"
    \ . "=substitute(system('python -m base64 -e', @b), "
    \ . "'\\n', '', 'g')\<CR>\<ESC>"
endfunction

function! Base64Decode() range
    let l:join = "\"bc"
    if a:firstline != a:lastline
        " gJ exits vis mode so we need a cc to change two lines
        let l:join = "gJ" . l:join . "c"
    endif
    exe "normal! " . a:firstline . "GV" . a:lastline . "G" . l:join
    \ . "0\<C-d>\<C-r>\<C-o>"
    \ . "=system('python -m base64 -d', @b)\<CR>\<BS>\<ESC>"
endfunction

command! -nargs=0 -range -bar Base64Encode <line1>,<line2>call Base64Encode()
command! -nargs=0 -range -bar Base64Decode <line1>,<line2>call Base64Decode()

Некоторые функции, которые это обеспечивает:

  • Поддерживает диапазоны, по умолчанию преобразует только текущую строку (например, используйте :%Base64Encode для кодирования всего файла, и он будет работать, как и ожидалось, в визуальном режиме, хотя он преобразует только целые строки)

  • Не оставляет выходные данные с отступом - все отступы (табуляции / пробелы) кодируются в base64, а затем сохраняются при декодировании.

  • Поддерживает объединение с другими командами с |

Соответствующие :help теги: user-functions, func-range, i_0_CTRL-D, i_CTRL-R_CTRL-O, expr-register, system(), user-commands, command-nargs, command-range, :normal

0 голосов
/ 22 ноября 2016

Base64 кодирует / декодирует выбранную визуально область в буфере и буфере обмена, поместите это в ~ / .vimrc и используйте F2 для кодирования выделения и F3 для декодирования выделения

" 1. base64-encode(visual-selection) -> F2 -> encoded base64-string
:vnoremap <F2> c<c-r>=system("base64 -w 0", @")<cr><esc>

" 2. base64-decode(visual-selection) -> F3 -> decoded string
:vnoremap <F3> c<c-r>=system("base64 -d", @")<cr> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...