मैंने लिखा है और अपने विम विंडो को कॉपी-पेस्ट करने के लिए अपने vimrc में निम्नलिखित कोड स्निपेट का उपयोग कर रहा हूं।
यह उदाहरण के लिए निम्नलिखित शॉर्टकट परिभाषित करता है:
<c-w>y
: "यन्क्स विन्डो", अर्थात वर्तमान विंडो में बफ़र की संख्या को एक वैश्विक चर में संग्रहीत करता है।
<c-w>pp
: "वर्तमान विंडो के स्थान पर विंडो को डालता है", अर्थात यह पहले से संग्रहीत बफर नंबर को पढ़ता है और वर्तमान विंडो में उस बफर को खोलता है। यह उस बफर की संख्या को भी संग्रहीत करता है जो वर्तमान विंडो में हुआ करता था।
यदि "उन विंडो को स्थानों पर स्वैप करके", तो आपका मतलब है "विंडो बी में विंडो ए में बफर खोलना, और इसके विपरीत, खिड़कियों की स्थिति को बदलने के बिना", आप विंडोज़ स्वैप करने के लिए निम्नलिखित कीबोर्ड अनुक्रम का उपयोग कर सकते हैं:
- विंडो ए चुनें (या तो माउस के साथ या कीबोर्ड कमांड के साथ)
- प्रेस
<c-w>y
(बफर नंबर yanking)
- विंडो B चुनें
- प्रेस
<c-w>pp
(बफर को चिपकाते हुए)
- विंडो A चुनें
- प्रेस
<c-w>pp
(बफर को फिर से चिपकाते हुए)
यह केवल Vim> = 7.0 में काम करता है।
if version >= 700
function! HOpen(dir,what_to_open)
let [type,name] = a:what_to_open
if a:dir=='left' || a:dir=='right'
vsplit
elseif a:dir=='up' || a:dir=='down'
split
end
if a:dir=='down' || a:dir=='right'
exec "normal! \<c-w>\<c-w>"
end
if type=='buffer'
exec 'buffer '.name
else
exec 'edit '.name
end
endfunction
function! HYankWindow()
let g:window = winnr()
let g:buffer = bufnr('%')
let g:bufhidden = &bufhidden
endfunction
function! HDeleteWindow()
call HYankWindow()
set bufhidden=hide
close
endfunction
function! HPasteWindow(direction)
let old_buffer = bufnr('%')
call HOpen(a:direction,['buffer',g:buffer])
let g:buffer = old_buffer
let &bufhidden = g:bufhidden
endfunction
noremap <c-w>d :call HDeleteWindow()<cr>
noremap <c-w>y :call HYankWindow()<cr>
noremap <c-w>p<up> :call HPasteWindow('up')<cr>
noremap <c-w>p<down> :call HPasteWindow('down')<cr>
noremap <c-w>p<left> :call HPasteWindow('left')<cr>
noremap <c-w>p<right> :call HPasteWindow('right')<cr>
noremap <c-w>pk :call HPasteWindow('up')<cr>
noremap <c-w>pj :call HPasteWindow('down')<cr>
noremap <c-w>ph :call HPasteWindow('left')<cr>
noremap <c-w>pl :call HPasteWindow('right')<cr>
noremap <c-w>pp :call HPasteWindow('here')<cr>
noremap <c-w>P :call HPasteWindow('here')<cr>
endif