在vim中的选择上执行'base64 --decode'

时间:2011-10-21 06:19:14

标签: vim base64

我正在尝试在以可视模式选择的文本上执行'base64 --decode',但是base64命令似乎传递给整行,而不仅仅是我所做的选择。

我正在以可视模式选择文本,然后进入正常模式,以便我的命令行如下所示:

:'<,'>!base64 --decode

我应该如何只将选定的一行传递给base64 --decode?

提前致谢

5 个答案:

答案 0 :(得分:19)

如果要传递给shell命令的文本被强制移动到寄存器(例如, 对于未命名的寄存器),可以使用以下命令。

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

可以组合复制所选文本并运行命令 一步使用可视模式映射。

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

可以修改映射以使用输出替换所选文本 shell命令使用表达式寄存器。

:vnoremap <leader>64 c<c-r>=system('base64 --decode', @")<cr><esc>

答案 1 :(得分:8)

你可以使用Python来代替它。

选择要在可视模式下解码的行( V ),然后执行以下命令:

:'<,'>!python -m base64 -d

答案 2 :(得分:4)

如果要将文本替换为base64的输出,请使用类似

的内容
:vnoremap <leader>64 y:let @"=system('base64 --decode', @")<cr>gvP

答案 3 :(得分:0)

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> 

答案 4 :(得分:0)

这是一个使用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-functionsfunc-rangei_0_CTRL-Di_CTRL-R_CTRL-Oexpr-registersystem(),{{1 }},user-commandscommand-nargscommand-range