আমি কীভাবে দুটি ভারী ফাইল (বিভাজনে) ভিমে অবস্থিতি অদলবদল করতে পারি?


313

ধরুন আমি ভিমে বিভক্ত করার কিছু স্বেচ্ছাসেবক লেআউট পেয়েছি।

____________________
| one       | two  |
|           |      |
|           |______|
|           | three|
|           |      |
|___________|______|

সেখানে অদলবদল করার একটি উপায় আছে কি oneএবং twoবজায় রাখা একই লেআউট? এটি এই উদাহরণে সহজ, তবে আমি এমন একটি সমাধান খুঁজছি যা আরও জটিল লেআউটগুলির জন্য সহায়তা করবে।

হালনাগাদ:

আমার ধারণা আমার আরও পরিষ্কার হওয়া উচিত। আমার আগের উদাহরণটি প্রকৃত ব্যবহারের ক্ষেত্রে সরলকরণ ছিল। একটি প্রকৃত উদাহরণ সহ: বিকল্প পাঠ

একই লেআউটটি বজায় রেখে আমি কীভাবে those দুটি বিভক্তের কোনওরই অদলবদল করতে পারি?

হালনাগাদ! 3+ বছর পরে ...

আমি সিমগ্রিফিনের সমাধানটি একটি ভিম প্লাগইনে রেখেছি আপনি সহজেই ইনস্টল করতে পারেন! এটি আপনার প্রিয় প্লাগইন পরিচালকের সাথে ইনস্টল করুন এবং একবার ব্যবহার করে দেখুন: উইন্ডোসাপ.ভিম

একটু ডেমো


14
আপনি যদি আমার মতো দু'মিনিট আগে ভেবে ভেবে থাকেন "" এর জন্য আমার কি সত্যিই একটি প্লাগইন দরকার? ", দ্বিধা করা বন্ধ করুন এবং এটি ইনস্টল করুন। মূলত একটি কমান্ড রয়েছে: <লিডার> ডাব্লুডাব্লু যা আপনি দুবার টিপুন, প্রতিটি উইন্ডোতে একবার অদলবদল করতে। এটি অত্যন্ত সহজ এবং আপনি 30 সেকেন্ডে চালাবেন।
mdup

উত্তর:


227

পোস্টটি থেকে কিছুটা দেরি করে এসেছিল, তবে অন্য কোনও কিছুর সন্ধানে এটি এসেছিল। আমি উইন্ডো চিহ্নিত করতে কিছুক্ষণ আগে দুটি ফাংশন লিখেছিলাম এবং তারপরে উইন্ডোগুলির মধ্যে বাফারগুলি অদলবদল করে। এটি মনে হচ্ছে যা আপনি চাইছেন be

এগুলিকে আপনার .vimrc এ কেবল চড় মারুন এবং কীভাবে আপনি ফিট দেখবেন সেগুলি ম্যাপ করুন:

function! MarkWindowSwap()
    let g:markedWinNum = winnr()
endfunction

function! DoWindowSwap()
    "Mark destination
    let curNum = winnr()
    let curBuf = bufnr( "%" )
    exe g:markedWinNum . "wincmd w"
    "Switch to source and shuffle dest->source
    let markedBuf = bufnr( "%" )
    "Hide and open so that we aren't prompted and keep history
    exe 'hide buf' curBuf
    "Switch to dest and shuffle source->dest
    exe curNum . "wincmd w"
    "Hide and open so that we aren't prompted and keep history
    exe 'hide buf' markedBuf 
endfunction

nmap <silent> <leader>mw :call MarkWindowSwap()<CR>
nmap <silent> <leader>pw :call DoWindowSwap()<CR>

ব্যবহার করার জন্য (ধরে নিলেন আপনার ম্যাপেলেডার সেট হয়ে গেছে \) আপনি:

  1. Ctrl-w গতিবিধির মাধ্যমে অদলবদলের জন্য চিহ্নিত করতে উইন্ডোতে সরান
  2. টাইপ করুন \
  3. আপনি অদলবদল করতে চান উইন্ডোতে সরান
  4. টাইপ করুন w

ভাল খবর! আপনার উইন্ডো বিন্যাসটি স্ক্রু না করে অদলবদল করা বাফারগুলি!


17
আমি যদি তোমাকে দশবার উপার্জন করতে পারি! noremapএটি তৈরি করতে আমাকে ম্যাপিংগুলিতে ব্যবহার করতে হয়েছিল। নিশ্চিত নয় কেন, তবে আশাকরি যে এটি পরে যাকে খুঁজে পায় তাকে সহায়তা করে। : ডি
ওয়েজ

6
আমি আপনার সমাধানটি আমার প্রথম ভিম প্লাগইনে রেখেছি : উইন্ডোসাপ.ভিম । আমি এই প্রশ্নটি এবং আপনার উত্তরটিকে
রিডমিমে যুক্ত করেছি

আমি কয়েক বছর আগে আমার .vimrc এ স্যাগ্রিফিনের সমাধানটি রেখেছি এবং আমি বর্তমানে পরিষ্কার করছি, এবং এটি সমস্ত একটি প্লাগইনে স্থানান্তরিত করার সিদ্ধান্ত নিয়েছি। আমি নিষ্কাশনটি করেছি এবং এটি এখনও একটি বান্ডিল হিসাবে কাজ করে তা পরীক্ষা করতে, আমি উইন্ডোটিকে বহুবার বিভক্ত করেছি এবং কিছু 0r!figlet one[দু, তিন, ইত্যাদি] চালিয়েছি, তারপরে এটি পরীক্ষা করে দেখলাম । আরও যাওয়ার আগে আমি গিথুব পরীক্ষা করেছিলাম, আপনার (ওয়েস) প্লাগইনটি পেয়েছি, অ্যানিমেটেড ফিগলেট উইন্ডো অদলবদল সহ, এবং এই একই উত্তরের একটি লিঙ্ক (যা আমার আমার .vimrc এর মন্তব্য হিসাবে ছিল)। আমার মনে হয়েছিল আমি ইতিমধ্যে এটি তৈরি এবং আপলোড করেছি এবং তারপরে এটি ভুলে গেছি। যাইহোক, সুন্দর কাজ! আমাকে কিছু কাজ বাঁচায় :)
গ্যারি ফিক্সার

293

এটি দিয়ে শুরু:

____________________
| one       | two  |
|           |      |
|           |______|
|           | three|
|           |      |
|___________|______|

সক্রিয় উইন্ডোটিকে 'তিন' তৈরি করুন, তারপরে ctrl+ কমান্ডটি জারি করুন w J। এটি আপনাকে ছেড়ে দিয়ে স্ক্রিনের নীচের অংশটি পূরণ করতে বর্তমান উইন্ডোটিকে সরিয়ে দেয়:

____________________
| one       | two  |
|           |      |
|___________|______|
| three            |
|                  |
|__________________|

এখন পারেন 'এক' বা 'দুটি' সক্রিয় উইন্ডো করুন, তারপরে কমান্ড ctrl+ + w r। এটি আপনার সাথে রেখে বর্তমান সারিটির উইন্ডোগুলিকে 'আবর্তিত' করে:

____________________
| two       | one  |
|           |      |
|___________|______|
| three            |
|                  |
|__________________|

এখন সক্রিয় উইন্ডো করা দুই ', এবং নিম্নলিখিত কমান্ড ctrl+ + w H। এটি আপনাকে ছেড়ে দিয়ে স্ক্রিনের বাম অংশটি পূরণ করতে বর্তমান উইন্ডোটিকে সরিয়ে দেয়:

____________________
| two       | one  |
|           |      |
|           |______|
|           | three|
|           |      |
|___________|______|

আপনি দেখতে পাচ্ছেন, মানুভেয়ারটি কিছুটা বদলে গেছে। 3 টি উইন্ডো সহ এটি 'টাইল গেম' ধাঁধাগুলির মতো একটি। আপনার 4 বা ততোধিক উইন্ডোজ থাকলে আমি এটি পুনরায় চেষ্টা করার চেষ্টা করছি না - সেগুলি বন্ধ করে দিলে আপনি সেগুলি আবার পছন্দসই পজিশনে খোলাই ভাল d

আমি একটি স্ক্রিনকাস্ট তৈরি করেছি যাতে ভিমে বিভক্ত উইন্ডোগুলির সাথে কীভাবে কাজ করা যায়


2
আপনি একটি স্ক্রিনকাস্ট তৈরি করে অতিরিক্ত মাইল গেছেন, নেলস্ট্রোম, তবে আমি যা খুঁজছিলাম তা আসলে তা নয়। আমি বেসিক মুভমেন্ট কমান্ডগুলির সাথে বিভাজন নিয়ে কাজ করতে পারি, তবে আমি কী আগ্রহী তা হ'ল যদি স্বেচ্ছাসেবী জটিলতার বিন্যাসে বিভক্ত লোকেশনগুলি অদলবদলের কোনও উপায় থাকে।
ওয়েজ

95
আমার মতো লোকদের জন্য, কেবল দুটি উইন্ডো অদলবদল করতে শিখতে চান: ctrl-w rএকটি কবজির মতো কাজ করে। টিপটির জন্য আপনাকে ধন্যবাদ! এখানে আমার +1।
ereOn

আমি \mw/ \pwএবং এটি উভয়কেই উত্সাহিত করেছি এবং প্রতি এক সপ্তাহের জন্য উভয় ব্যবহারের চেষ্টা করেছি। আমি এই "নেটিভ" সমাধানটি সবচেয়ে ভাল ব্যবহার করে দেখতে পেলাম, যেহেতু আমার উপরে সার্ভার এবং দূরবর্তী মেশিন এবং ডেস্কটপ, ল্যাপটপ, ট্যাবলেট এবং অন্যান্য সমস্ত ডিভাইসে থাকা আমার উপরোর্ধ্ব ডজন ডজন ভিআইএম ইনস্টল থাকা দরকার নেই। আইওডাব্লু, এই নেটিভ কমান্ডগুলি (উদাহরণস্বরূপ ctrl-w r) শিখাই আপনার মেমরির পেশীগুলির প্রতি প্রতিশ্রুতিবদ্ধ এবং সম্পন্ন করা দরকার।
eduncan911

96

কটাক্ষপাত :h ctrl-w_ctrl-xএবং / অথবা :h ctrl-w_ctrl-r। এই কমান্ডগুলি আপনাকে বর্তমান বিন্যাসে উইন্ডোজ বিনিময় বা ঘোরানোর অনুমতি দেয়।

সম্পাদনা: আসলে, এটি এই পরিস্থিতিতে কাজ করবে না কারণ এটি কেবল বর্তমান কলাম বা সারিটিতে স্যুপ বদল করবে। পরিবর্তে আপনি প্রতিটি উইন্ডোতে গিয়ে লক্ষ্য বাফারটি নির্বাচন করতে পারেন, তবে এটি বেশ ভার্জোজ।


30

র্যান্ডির সঠিক CTRL-W xএটি একই কলাম / সারিতে নেই এমন উইন্ডোগুলিকে অদলবদল করতে চায় না।

আমি খুঁজে পেয়েছি যে CTRL-W HJKLউইন্ডোজগুলি পরিচালনা করার সময় কীগুলি সর্বাধিক কার্যকর। তারা আপনার বর্তমান উইন্ডোটিকে তার বর্তমান অবস্থান থেকে জোর করে বাইরে বের করবে এবং আপনি যে কী টিপবেন তার দিক নির্দেশিত পুরো প্রান্তটি দখল করতে বলবে। দেখুন :help window-movingআরো বিস্তারিত জানার জন্য।

আপনার উপরের উদাহরণের জন্য, আপনি যদি উইন্ডোতে "একটি" শুরু করেন, এটি আপনার যা ইচ্ছা তা করে:

CTRL-W K   # moves window "one" to be topmost,
           #   stacking "one", "two", "three" top to bottom
CTRL-W j   # moves cursor to window "two"
CTRL-W H   # moves window "two" to be leftmost,
           #   leaving "one" and "three" split at right

সুবিধার জন্য, আপনি কী ম্যাপিংগুলিতে আপনার প্রয়োজনীয় ক্রমগুলি নির্ধারণ করতে পারেন (দেখুন :help mapping)।


10

আমার সাগ্রিফিনের সমাধান থেকে কিছুটা বর্ধিত সংস্করণ রয়েছে, আপনি দুটি কমান্ড ব্যবহার না করে উইন্ডোজ অদলবদল করতে পারেন, তবে স্বজ্ঞাত এইচজেকেএল কমান্ডের সাহায্যে।

সুতরাং এটি এখানে কিভাবে হয়:

function! MarkWindowSwap()
    " marked window number
    let g:markedWinNum = winnr()
    let g:markedBufNum = bufnr("%")
endfunction

function! DoWindowSwap()
    let curWinNum = winnr()
    let curBufNum = bufnr("%")
    " Switch focus to marked window
    exe g:markedWinNum . "wincmd w"

    " Load current buffer on marked window
    exe 'hide buf' curBufNum

    " Switch focus to current window
    exe curWinNum . "wincmd w"

    " Load marked buffer on current window
    exe 'hide buf' g:markedBufNum
endfunction

nnoremap H :call MarkWindowSwap()<CR> <C-w>h :call DoWindowSwap()<CR>
nnoremap J :call MarkWindowSwap()<CR> <C-w>j :call DoWindowSwap()<CR>
nnoremap K :call MarkWindowSwap()<CR> <C-w>k :call DoWindowSwap()<CR>
nnoremap L :call MarkWindowSwap()<CR> <C-w>l :call DoWindowSwap()<CR>

সাধারণ নোডে মূলধন এইচজেকেএল ব্যবহার করে আপনার উইন্ডোটি সরানোর চেষ্টা করুন, এটি সত্যিই দুর্দান্ত :)


3

@ স্যাগ্রিফিনের উত্তরে প্রচুর পরিমাণে বিল্ডিং , আপনি যা জিজ্ঞাসা করছেন তার নিকটে এমন কিছু এখানে রয়েছে:

function! MarkWindow()
        let g:markedWinNum = winnr()
endfunction

function! SwapBufferWithMarkedWindow()
        " Capture current window and buffer
        let curWinNum = winnr()
        let curBufNum = bufnr("%")

        " Switch to marked window, mark buffer, and open current buffer
        execute g:markedWinNum . "wincmd w"
        let markedBufNum = bufnr("%")
        execute "hide buf" curBufNum

        " Switch back to current window and open marked buffer
        execute curWinNum . "wincmd w"
        execute "hide buf" markedBufNum
endfunction

function! CloseMarkedWindow()
        " Capture current window
        let curWinNum = winnr()

        " Switch to marked window and close it, then switch back to current window
        execute g:markedWinNum . "wincmd w"
        execute "hide close"
        execute "wincmd p"
endfunction

function! MoveWindowLeft()
        call MarkWindow()
        execute "wincmd h"
        if winnr() == g:markedWinNum
                execute "wincmd H"
        else
                let g:markedWinNum += 1
                execute "wincmd s"
                execute g:markedWinNum . "wincmd w"
                execute "wincmd h"
                call SwapBufferWithMarkedWindow()
                call CloseMarkedWindow()
        endif
endfunction

function! MoveWindowDown()
        call MarkWindow()
        execute "wincmd j"
        if winnr() == g:markedWinNum
                execute "wincmd J"
        else
                execute "wincmd v"
                execute g:markedWinNum . "wincmd w"
                execute "wincmd j"
                call SwapBufferWithMarkedWindow()
                call CloseMarkedWindow()
        endif
endfunction

function! MoveWindowUp()
        call MarkWindow()
        execute "wincmd k"
        if winnr() == g:markedWinNum
                execute "wincmd K"
        else
                let g:markedWinNum += 1
                execute "wincmd v"
                execute g:markedWinNum . "wincmd w"
                execute "wincmd k"
                call SwapBufferWithMarkedWindow()
                call CloseMarkedWindow()
        endif
endfunction

function! MoveWindowRight()
        call MarkWindow()
        execute "wincmd l"
        if winnr() == g:markedWinNum
                execute "wincmd L"
        else
                execute "wincmd s"
                execute g:markedWinNum . "wincmd w"
                execute "wincmd l"
                call SwapBufferWithMarkedWindow()
                call CloseMarkedWindow()
        endif
endfunction

nnoremap <silent> <Leader>wm :call MarkWindow()<CR>
nnoremap <silent> <Leader>ws :call SwapBufferWithMarkedWindow()<CR>
nnoremap <silent> <Leader>wh :call MoveWindowLeft()<CR>
nnoremap <silent> <Leader>wj :call MoveWindowDown()<CR>
nnoremap <silent> <Leader>wk :call MoveWindowUp()<CR>
nnoremap <silent> <Leader>wl :call MoveWindowRight()<CR>

আচরণটি যদি আপনার প্রত্যাশার সাথে মেলে না তবে দয়া করে আমাকে জানান।


2

এছাড়াও সাগ্রিফিনের সমাধানের উপর ভিত্তি করে, আপনি যে উইন্ডোটি অদলবদল করতে চান সেটিতে যান, টিপুন CTRL-w m, আপনি যে উইন্ডোটি দিয়ে স্যুপ করতে চান সেটি যান এবং CTRL-w mআবার টিপুন ।

CTRL-w m এটি একটি দুর্বল মনস্তাত্ত্বিক পছন্দ, সুতরাং যদি কেউ আরও ভাল কিছু নিয়ে আসে তবে দয়া করে এটি সম্পাদনা করুন।

এছাড়াও, আমি স্ক্রিপ্ট ওরফে "উইন্ডো চিহ্নিত চিহ্নিত। দয়া করে টার্গেটে পুনরাবৃত্তি করুন" থেকে একটি প্রতিক্রিয়া পেতে চাই, তবে এটি একটি উইমস্ক্রিপ্ট নুব হওয়ায় আমি কীভাবে এটি করব তা জানি না।

যা যা বলেছিল, স্ক্রিপ্টটিও ঠিক তেমন কাজ করে

" <CTRL>-w m : mark first window
" <CTRL>-w m : swap with that window
let s:markedWinNum = -1

function! MarkWindowSwap()
    let s:markedWinNum = winnr()
endfunction

function! DoWindowSwap()
    "Mark destination
    let curNum = winnr()
    let curBuf = bufnr( "%" )
    exe s:markedWinNum . "wincmd w"
    "Switch to source and shuffle dest->source
    let markedBuf = bufnr( "%" )
    "Hide and open so that we aren't prompted and keep history
    exe 'hide buf' curBuf
    "Switch to dest and shuffle source->dest
    exe curNum . "wincmd w"
    "Hide and open so that we aren't prompted and keep history
    exe 'hide buf' markedBuf
endfunction

function! WindowSwapping()
    if s:markedWinNum == -1
        call MarkWindowSwap()
    else
        call DoWindowSwap()
        let s:markedWinNum = -1
    endif
endfunction

nnoremap <C-w>m :call WindowSwapping()<CR>

1

নিম্নলিখিত কারণগুলি সুবিধাজনক হতে পারে যদি ফাংশনগুলি কোনও কারণে উপলব্ধ না হয় (তবে এটি আপনার ভিম নয়)।

:buffersখোলা বাফারগুলির আইডি খুঁজে পেতে কমান্ডটি ব্যবহার করুন , কাঙ্ক্ষিত উইন্ডোটিতে নেভিগেট করুন এবং :b 5একটি বাফার খুলতে পছন্দ করুন (এই ক্ষেত্রে বাফার নম্বর 5)। দু'বার পুনরাবৃত্তি করুন এবং উইন্ডোগুলির সামগ্রীগুলি অদলবদল করা হয়।

ctrl-w-somethingমূল প্রশ্নে এক-দুই-তিনের মতো খুব সাধারণ বিন্যাসের জন্য এমনকি সিক্যোয়েন্সগুলি মুখস্ত করার বেশ কয়েকটি চেষ্টার পরেও আমি এই পদ্ধতিটি "আবিষ্কার" করেছি ।


1

সত্যিই শীতল, কিন্তু ম্যাপিং জন্য আমার প্রস্তাব ব্যবহার করা ^ ডব্লিউ ^ জে পরিবর্তে জে (HJKL সমস্ত ইতিমধ্যে অর্থ আছে কারণ), প্লাস আমি টান চাই মধ্যে নতুন বাফার, কারণ সময় দ্বারা আপনি আপনার চারপাশের অদলবদল করতে চান আপনি ইতিমধ্যে চালু বাফারটি সম্পাদনা চালিয়ে যেতে চান না। এখানে যায়:

function! MarkSwapAway()
    " marked window number
    let g:markedOldWinNum = winnr()
    let g:markedOldBufNum = bufnr("%")
endfunction
function! DoWindowToss()
    let newWinNum = winnr()
    let newBufNum = bufnr("%")
    " Switch focus to marked window
    exe g:markedOldWinNum . "wincmd w"
    " Load current buffer on marked window
    exe 'hide buf' newBufNum
    " Switch focus to current window
    exe newWinNum . "wincmd w"
    " Load marked buffer on current window
    exe 'hide buf' g:markedOldBufNum
    " …and come back to the new one
    exe g:markedOldWinNum . "wincmd w"
endfunction
nnoremap <C-w><C-h> :call MarkSwapAway()<CR> <C-w>h :call DoWindowToss()<CR>
nnoremap <C-w><C-j> :call MarkSwapAway()<CR> <C-w>j :call DoWindowToss()<CR>
nnoremap <C-w><C-k> :call MarkSwapAway()<CR> <C-w>k :call DoWindowToss()<CR>
nnoremap <C-w><C-l> :call MarkSwapAway()<CR> <C-w>l :call DoWindowToss()<CR>

1

উপরের সমস্ত উত্তর দুর্দান্ত, দুর্ভাগ্যক্রমে এই সমাধানগুলি কুইকফিক্স বা লোকেশনলিস্ট উইন্ডোগুলির সাথে একযোগে কার্যকরভাবে কাজ করে না (এলে কাজ করার জন্য আলে ত্রুটি বার্তা বার্নার চেষ্টা করার সময় আমি এই সমস্যায় পড়েছিলাম)।

সমাধান

অতএব আমি অদলবদল করার আগে এই সমস্ত উইন্ডোজ বন্ধ করার জন্য একটি অতিরিক্ত কোডের লাইন যুক্ত করেছি।

exe ':windo if &buftype == "quickfix" || &buftype == "locationlist" | lclose | endif'

মোট কোড দেখতে দেখতে;

" Making swapping windows easy
function! SwapWindowBuffers()
    exe ':windo if &buftype == "quickfix" || &buftype == "locationlist" | lclose | endif'
    if !exists("g:markedWinNum")
        " set window marked for swap
        let g:markedWinNum = winnr()
        :echo "window marked for swap"
    else
        " mark destination
        let curNum = winnr()
        let curBuf = bufnr( "%" )
        if g:markedWinNum == curNum
            :echo "window unmarked for swap"
        else
            exe g:markedWinNum . "wincmd w"
            " switch to source and shuffle dest->source
            let markedBuf = bufnr( "%" )
            " hide and open so that we aren't prompted and keep history
            exe 'hide buf' curBuf
            " switch to dest and shuffle source->dest
            exe curNum . "wincmd w"
            " hide and open so that we aren't prompted and keep history
            exe 'hide buf' markedBuf
            :echo "windows swapped"
        endif
        " unset window marked for swap
        unlet g:markedWinNum
    endif
endfunction

nmap <silent> <leader>mw :call SwapWindowBuffers()<CR>

ব্র্যান্ডন অর্থারে অদলবদলের জন্য ক্রেডিট

কেন এটি প্রয়োজন

প্রথমে সমস্ত কুইকফিক্স (কিউএফ) এবং লোকেশনলিস্ট (এলএল) উইন্ডোগুলি সরিয়ে না দিয়ে সোয়াপ ফাংশনগুলি সঠিকভাবে কাজ না করার কারণ হ'ল কিউএফ / এলএল এর পিতামাতারা যদি গেটের গোপন (এবং উইন্ডোতে কোথাও দেখানো হয়নি) বাফার করেন তবে কিউএফ / এটির সাথে যুক্ত এলএল উইন্ডোটি সরানো হবে। এটি নিজের মধ্যে কোনও সমস্যা নয় তবে উইন্ডোটি যখন লুকিয়ে থাকে তখন সমস্ত উইন্ডো নম্বর পুনঃনির্ধারণ করা হয় এবং অদলবদলটি মিশ্রিত হয় যেহেতু প্রথম চিহ্নিত উইন্ডোর সংরক্ষিত নম্বরটি আর থাকে না (সম্ভাব্য) আর থাকে না।

এই পারস্পরিক দৃষ্টিভঙ্গি রাখতে:

প্রথম উইন্ডো চিহ্ন

____________________
| one              | -> winnr = 1    marked first    g:markedWinNum=1
|                  | -> bufnr = 1
|__________________|
| two (QF window   | -> winnr = 2
| coupled to one   |
|__________________|
| three            | -> winnr = 3
|                  | -> bufnr = 2
|__________________|

দ্বিতীয় উইন্ডো চিহ্ন

____________________
| one              | -> winnr = 1                    g:markedWinNum=1
|                  | -> bufnr = 1
|__________________|
| two (QF window   | -> winnr = 2
| coupled to one)  |
|__________________|
| three            | -> winnr = 3    marked second    curNum=3
|                  | -> bufnr = 2                     curBuf=2
|__________________|

প্রথম বাফার সুইচ, উইন্ডো এক উইন্ডো তিনের বাফার দিয়ে পূর্ণ হয়। সুতরাং কিউএফ উইন্ডোটি মুছে ফেলা হবে কারণ এর আর কোনও প্যারেন্ট উইন্ডো নেই। এটি উইন্ডোজ নম্বরগুলি পুনরায় সাজায়। নোট করুন যে কার্নাম (দ্বিতীয় নির্বাচিত উইন্ডোর সংখ্যা) এমন উইন্ডোটির দিকে ইঙ্গিত করছে যা এর অস্তিত্ব নেই।

____________________
| three            | -> winnr = 1                    g:markedWinNum=1
|                  | -> bufnr = 2
|__________________|
| three            | -> winnr = 2                     curNum=3
|                  | -> bufnr = 2                     curBuf=2
|__________________|

সুতরাং দ্বিতীয় বাফারটি স্যুইচ করার সময়, এটি কারনম উইন্ডোটি নির্বাচন করার চেষ্টা করে, যা এর বেশি কোনও অস্তিত্ব নেই। সুতরাং এটি এটি তৈরি করে এবং বাফারটি স্যুইচ করে, ফলস্বরূপ একটি অযাচিত উইন্ডোটি খালি থাকে।

____________________
| three            | -> winnr = 1                    g:markedWinNum=1
|                  | -> bufnr = 2
|__________________|
| three            | -> winnr = 2
|                  | -> bufnr = 2
|__________________|
| one              | -> winnr = 3                     curNum=3
|                  | -> bufnr = 1                     curBuf=2
|__________________|

0

অনুরূপ চিহ্ন উইন্ডো-তারপরে-অদলবদ-বাফার পদ্ধতির, তবে আপনাকে সর্বশেষ সোয়াপিং পুনরায় ব্যবহার করতে দেয়।

function! MarkWindowSwap()
    unlet! g:markedWin1
    unlet! g:markedWin2
    let g:markedWin1 = winnr()
endfunction

function! DoWindowSwap()
    if exists('g:markedWin1')
        if !exists('g:markedWin2')
            let g:markedWin2 = winnr()
        endif
        let l:curWin = winnr()
        let l:bufWin1 = winbufnr(g:markedWin1)
        let l:bufWin2 = winbufnr(g:markedWin2)
        exec g:markedWin2 . 'wincmd w'
        exec ':b '.l:bufWin1
        exec g:markedWin1 . 'wincmd w'
        exec ':b '.l:bufWin2
        exec l:curWin . 'wincmd w'
    endif
endfunction

nnoremap ,v :call DoWindowSwap()<CR>
nnoremap ,z :call MarkWindowSwap()<CR>

যেহেতু আমি ইতিমধ্যে set hidden.vimrc এ এসেছি , সুতরাং ম্যানুয়ালি বাফারগুলি লুকানোর দরকার নেই।
কিটাজি

-5

আপনি এক্স-মনাডের মতো একটি টাইলিং উইন্ডো ম্যানেজারও ব্যবহার করতে পারেন


যদিও সত্য এই উত্তরটি ওপি-র প্রশ্নের সাথে সম্পর্কিত নয়। ম্যাক বা উইন্ডোজ মেশিনে ভিএম ব্যবহার করা যেতে পারে। ভিম ট্যাবলেট এবং এমনকি ফোনে উপলব্ধ যাগুলির মধ্যে আপনার উইন্ডো ম্যানেজারটি অদলবদল করার ক্ষমতা নেই afford
nsfyn55
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.