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()
5条答案
按热度按时间dhxwm5r41#
如果要传递给shell命令的文本首先被拉到一个寄存器,比如未命名的寄存器,可以使用以下命令:
可以将复制所选文本和运行命令组合到单个视觉模式键Map中:
可以进一步修改Map,以通过表达式寄存器用shell命令的输出替换所选文本:
jchrr9hc2#
你可以使用Python来代替,这应该是可行的。
选择要在可视模式下解码的行(通过V),然后执行以下命令:
nwo49xxi3#
如果要用
base64
的输出替换文本,请使用类似说明:
y
→拖动当前选定的文本以注册"
。这将取消选择文本。:let @"=system('base64 --decode', @")
→将"
寄存器的内容传递到base64
,并将结果写入同一寄存器"
。gv
→再次选择先前选择的文本。P
→粘贴寄存器"
中的文本,替换当前选定的文本。twh00eeo4#
Base64对缓冲区和剪贴板中的视觉选定区域进行编码/解码,将其放入~/.vimrc中,并使用F2对选择进行编码,使用F3对选择进行解码
zzzyeukh5#
下面是一个使用Python和
base64
模块提供base64解码和编码命令的脚本。支持任何其他base64程序也很简单,只要它从stdin读取-只需将python -m base64 -e
替换为encoding命令,将python -m base64 -d
替换为decoding命令。这提供了一些功能:
:%Base64Encode
对整个文件进行编码,它将在可视化模式下按预期工作,尽管它只转换整行)|
与其他命令组合相关
:help
标签:user-functions
、func-range
、i_0_CTRL-D
、i_CTRL-R_CTRL-O
、expr-register
、system()
、user-commands
、command-nargs
、command-range
、:normal