vim

2011-10-21 17 views
13

मैं दृश्य मोड में चयनित पाठ के एक टुकड़े पर अमल करने के लिए 'बेस 64 --decode' कोशिश कर रहा हूँ में एक चयन पर 'बेस 64 --decode' निष्पादित, लेकिन बेस 64 आदेश पूरी पंक्ति पारित होने के लिए, नहीं लगता है सिर्फ चयन मैं बना दिया।vim

मैं दृश्य मोड में पाठ का चयन कर रहा हूँ, तो सामान्य मोड में प्रवेश ताकि मेरे आदेश पंक्ति इस तरह दिखता है:

:'<,'>!base64 --decode 

मैं कैसे बेस 64 --decode करने के लिए लाइन का केवल कुछ भाग चयनित पास करना चाहिए ?

अग्रिम

+0

आप करना चाहते हैं चयनित पाठ को प्रतिस्थापित करें? –

+0

प्रतिस्थापन ठीक होगा, कंसोल के लिए सादे आउटपुट ठीक भी होगा। – Jonatan

उत्तर

15

पाठ शेल कमांड को पारित करने के लिए तो धन्यवाद एक रजिस्टर करने के लिए yanked है (उदाहरण के लिए, अनाम रजिस्टर करने के लिए), एक निम्न आदेश का उपयोग कर सकते हैं।

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

यह चयनित पाठ और एक दृश्य मोड मानचित्रण का उपयोग कर एक कदम में आदेश चलाने का नकल गठबंधन करने के लिए संभव है।

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

मानचित्रण अभिव्यक्ति रजिस्टर का उपयोग कर शेल कमांड के उत्पादन के साथ चयनित पाठ को बदलने के लिए संशोधित किया जा सकता।

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

पहले उदाहरण को नए विम टैब में गूंजना संभव है? – shredding

+0

या अगर मैं इसे मैक्रो आउट कैसे करूं? – shredding

+1

@shredding: बस 'बेस 64' को कॉपी करने और कॉल करने के बीच एक नए टैब पेज में एक खाली बफर खोलने के लिए एक कमांड जोड़ें:' vnoremap 64 y: tabe \ | pu! = System ('base64 -d', @@) '। –

4

आप base64 के उत्पादन के साथ पाठ बदलने के लिए चाहते हैं, जैसे

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

आप अजगर के बजाय का उपयोग कर सकते हैं जो काम करना चाहिए कुछ का उपयोग करें।

लाइनों का चयन करें जो आप दृश्य मोड (वी) में डिकोड करने के लिए चाहते हैं, तो निम्न आदेश निष्पादित करें:/

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

बेस 64 एन्कोड बफर और क्लिपबोर्ड में दृश्य-चयनित क्षेत्र को डिकोड, में रखते ~/.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> 
0

यहाँ डिकोड करने के लिए एक स्क्रिप्ट अजगर और base64 मॉड्यूल का उपयोग करता है base64 डिकोड और ENC प्रदान करने के लिए है स्तोत्र आदेशों। यह बहुत किसी अन्य बेस 64 कार्यक्रम का समर्थन करने के साथ ही सरल, जब तक कि यह 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 का उपयोग उदाहरण के लिए पूरी फ़ाइल एन्कोड करने के लिए, द्वारा केवल वर्तमान लाइन बदल देता है, और यह के भीतर से अपेक्षा के अनुरूप काम करेंगे दृश्य मोड, हालांकि यह केवल पूरी लाइनों को परिवर्तित करता है)

  • आउटपुट इंडेंट नहीं छोड़ता है - सभी इंडेंट्स (टैब/रिक्त स्थान) को बेस 64 में एन्कोड किया जाता है, और फिर डीकोडिंग के दौरान संरक्षित किया जाता है।

  • |

प्रासंगिक :help टैग के साथ अन्य आदेशों के साथ संयुक्त किया जा रहा समर्थन करता है: user-functions, func-range, i_0_CTRL-D, i_CTRL-R_CTRL-O, expr-register, system(), user-commands, command-nargs, command-range, :normal