शब्दों को आसान तरीके से कैसे स्विच करें (VIM में)?


12

मैं यह जानने के लिए पर्याप्त नहीं हूं कि यह संभव है या नहीं (यही वजह है कि मैं सुपरसुसर आया और अच्छा नहीं) ~ क्या दो शब्दों को आसानी से स्विच करने का कोई तरीका है?

उदाहरण के def function(param1, param2)लिए वहाँ है कि बदलने के लिए एक त्वरित / आसान तरीका है def function(param2, param1)???

जवाबों:


13

मुझे याद नहीं है कि मुझे मूल रूप से यह कहाँ मिला है, लेकिन यह कम से कम कुछ वर्षों के लिए मेरे ~ / .vimrc में है -

" Swap the word the cursor is on with the next word (which can be on a
" newline, and punctuation is "skipped"):
nmap <silent> gw "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o>:noh<CR>

आपके द्वारा परिभाषित किए जाने के बाद, आपको अपना कर्सर सामान्य मोड और प्रकार में "param1" पर रखना होगा। gw


4
मेरे पास भी है, यह विम विकी से आता है।
रोमेनिल

5

@ हेपटाइट के उत्तर के लिए +1।

अधिक पूर्णता के लिए, यहाँ मेरे पास मेरे .vimrc में है:

" push current line up or down
nnoremap <leader><Up> ddkP
nnoremap <leader><Down> ddp

" exchange character under cursor with the next character without moving the cursor
nnoremap gc xph

" exchange word under cursor with the next word without moving the cursor
nnoremap gw "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o><C-l>

" push word under cursor to the left
nnoremap <leader><Left> "_yiw?\w\+\_W\+\%#<CR>:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o><C-l>

" push word under cursor to the right
nnoremap <leader><Right> "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o>/\w\+\_W\+<CR><C-l>

स्रोत: vim विकि

मैं देखता हूं कि मेरा (और विकी का) gwहेपेटाइट के एक से थोड़ा अलग है। मुझे यकीन नहीं है कि कौन सा बेहतर है।


4

वह लंबा समाधान बदसूरत है। मान लीजिए कि आपका कर्सर पहले शब्द के पहले अक्षर के बाईं ओर है, जो कि 'p' है। यह करें dwlpldw%p:। यह आपके विशेष मामले में फिट बैठता है। दैनिक संपादन से कैसे निपटें? कोशिश करो dwwP, या dWWP। : डी

सुझाव: हमेशा लंबे समय तक नियमित अभिव्यक्ति न लिखें, अगर आपको अक्सर ऐसा करने की आवश्यकता नहीं होती है। नहीं तो आपका vimrc बूम करता है। सभी विम उपयोगकर्ता इसके बिलियन कर्सर आंदोलन से परिचित होंगे।


1

मैं के संयोजन का उपयोग repeatable मैपिंग लिखा vim-विनिमय , Repeatable (जो पर निर्भर करता है repeat.vim ), और argtextobj

" Swap function arguments, move the argument under the cursor to the left or to
" the right.
Repeatable map <leader>al cxiaf,cxia
Repeatable map <leader>ah cxiaF,hcxia

इन मैपिंग के लिए एक्सचेंज और रिपीटेबल प्लगइन्स का उपयोग करने में लाभ निम्न हैं:

  • एक पूर्ववत करना uस्वैप को पूर्ववत कर देगा (वे परमाणु परिवर्तन हैं)
  • आप .तर्क को बाएं / दाएं चलते रहने के लिए उपयोग कर सकते हैं ।

मैं मुझे पता है, यह एक सरल ऑपरेशन के लिए प्लग-इन की एक पूरी बहुत अधिक प्रतीत होती है, लेकिन लगता है क्या पता किसी और उन प्लग इन हैं दे:

  • argtextobj आप देता है iaऔर aa(हटाने के लिए textobj diaऔर daa), और yanking ( yia)।
  • vim-repeat और अपने किसी भी मैपिंग को दोहराने योग्य बनाने के लिए repeatable .
  • vim-exchange आपको पाठ का दोहराव, परमाणु विनिमय प्रदान करता है।

1

लैटिन भाषाओं के लिए स्वैप मैपिंग

विम विकी से स्वैप मैपिंग उच्चारण पात्रों के साथ शब्दों पर सही ढंग से संचालित नहीं होगी

ये मैपिंग (यूरोपीय) ISO / IEC_8859-1 लैटिन -1 पूरक वर्णों के साथ काम करने के लिए अनुकूलित हैं । यह सब उदाहरण प्रतिस्थापन द्वारा किया जाता है \wके साथ [0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]और के सभी उदाहरणों \_Wके साथ \_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]

खोज हाइलाइटिंग की समाशोधन

इसके अलावा, खोज हाइलाइटिंग को साफ़ किया जाता है जहाँ आवश्यकता होती है। यह :nohlsearch<return>जरूरत में प्रत्येक मानचित्रण के अंत में जोड़कर प्राप्त किया जाता है।

यहाँ अंतिम परिणाम है:

" Use gc to swap the current CHARACTER with the next, WITHOUT changing the cursor position.
nnoremap <silent> gc xph

" Use gw to swap the current WORD with the next, WITHOUT changing the cursor position.
nnoremap <silent> gw "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o><c-l>:nohlsearch<return>

" Disable Alt+[menukey] menu keys (i.e. Alt+h for help)
set winaltkeys=no

" Use Alt + ← or Alt + h to swap the current WORD with the previous, keeping the cursor on the current word. This feels like "PUSHING" the word to the left.
nnoremap <silent> <A-Left> "_yiw?[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]\+\%#<CR>:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o><c-l>:nohlsearch<return>
nnoremap <silent> <A-h>    "_yiw?[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]\+\%#<CR>:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o><c-l>:nohlsearch<return>
" <A-h> corresponds to è

" Use Alt + → or Alt + l to swap the current WORD with the next, keeping the cursor on the current word. This feels like "PUSHING" the word to the right.
nnoremap <silent> <A-Right> "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o>/[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+<CR><c-l>:nohlsearch<return>
nnoremap <silent> <A-l>     "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o>/[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+<CR><c-l>:nohlsearch<return>
" <A-l> corresponds to ì

" Use g{ to swap the current PARAGRAPH with the next.
nnoremap g{ {dap}p{

0

एक्लिम प्लगइन एक अच्छा प्रदान करता है। सभी उन्हें क्रेडिट :)

:SwapWords

.. और यदि आप पूरे प्लगइन को स्थापित नहीं करना चाहते हैं, तो यहां उनका फ़ंक्शन निकाला गया है:

" Swap words:
" taken from Eclim
" https://github.com/ervandew/eclim

function! SwapWords() " {{{
  " Initially based on http://www.vim.org/tips/tip.php?tip_id=329

  " save the last search pattern
  let save_search = @/

  normal! "_yiw
  let pos = getpos('.')
  keepjumps s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/
  call setpos('.', pos)

  " restore the last search pattern
  let @/ = save_search

  silent! call repeat#set(":call SwapWords()\<cr>", v:count)
endfunction " }}}

command! SwapWords :call SwapWords()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.