我正在尝试在以可视模式选择的文本上执行'base64 --decode',但是base64命令似乎传递给整行,而不仅仅是我所做的选择。
我正在以可视模式选择文本,然后进入正常模式,以便我的命令行如下所示:
:'<,'>!base64 --decode
我应该如何只将选定的一行传递给base64 --decode? p>
提前致谢
答案 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-functions
,func-range
,i_0_CTRL-D
,i_CTRL-R_CTRL-O
,expr-register
,system()
,{{1 }},user-commands
,command-nargs
,command-range