Rekatkan beberapa baris sebelum baris dalam vim?

0

Bagaimana cara menyalin beberapa baris dan menempelkannya sebagai blok sebelum baris? Sebagai contoh saya memiliki kode berikut dan saya ingin menyalin dan menempelkan tiga baris setelah pernyataan if untuk setelah pernyataan lain tetapi sebelum baris di bawahnya.

[row col] = find(H);  
if (nargin < 4)    

    delqmn = sparse(row, col, 0, M, N); % diff of msgs from bits to checks
    delrmn = sparse(row, col, 0, M, N);% diff of msgs from checks to bits
    rmn0 = sparse(row, col, 0, M, N);% msgs from checks to bits (p=0)
else

// Insert 3 lines after if statement here

qn0 = 1-r;% pseudoposterior probabilities
qn1 = r;% pseudoposterior probabilities

Terima kasih

Umar
sumber
3
Ini adalah hal dasar dan tercakup dalam vimtutor. Saya sarankan Anda menjalankannya jika belum.
Heptite

Jawaban:

3

Anda dapat menemukan banyak informasi berguna dari vim sendiri

:help registers

Secara singkat, untuk menyalin beberapa baris gunakan: di #yy mana # adalah jumlah baris yang akan disalin

Untuk menempelkan garis-garis itu gunakan Puntuk menempel di atas kursor dan puntuk menempel di bawah.

Jika Anda menyalin setiap baris sekaligus (dengan melakukan yytiga kali), Anda akan menyalin teks menjadi tiga register. Untuk menyisipkan baris kembali, Anda dapat menempel dari masing-masing register ini dengan "#p (di mana # adalah nomor register). Ini adalah metode yang baik jika teks yang disalin tidak berada dalam blok yang berdekatan.

mcalex
sumber
Umm, saya pikir Anda salah paham bagaimana cara pkerjanya. Jika sebuah register tidak ditentukan, ia akan selalu menempelkan register yang tidak disebutkan namanya ( "). Jadi, menekan ptiga kali akan memberi Anda tiga salinan dari baris terakhir yang ditarik, kecuali jika pengguna sengaja mengatakan sebaliknya.
Heptite
oic. Saya yakin itu dihapus 0 dan pindah 1 ke 0 dan ". Akan mengedit
mcalex
Hampir sampai. Anda harus mengawali nama register dengan "karakter, jika tidak itu dianggap sebagai hitungan. Misalnya, 5pakan menempelkan register yang tidak disebutkan namanya lima kali, sementara "5pakan menempelkan register yang bernomor 5.
Heptite
Seperti yang saya rekomendasikan kepada OP, Anda mungkin ingin menjalankan melalui vimtutorjika Anda belum melakukannya.
Heptite
@Heptite oops, salah ketik. Terima kasih. di mana jawaban Anda
mcalex
0

Seperti yang sudah ditulis oleh Heptite, ini adalah hal-hal mendasar. vimtutoraturan.

Jika Anda penasaran, berikut adalah beberapa cara "maju" untuk melakukan apa yang Anda inginkan. Dengan asumsi kursor Anda berada pada baris pertama dari blok yang ingin Anda duplikasi dan Anda miliki set number, semua metode di bawah ini mengarah ke hasil yang sama. Tentu saja mungkin untuk menggabungkan bagian-bagian individual mereka sesuai dengan kebutuhan Anda, ini masih jauh dari daftar lengkap.

3yy/els<cr>p
    3yy      yank 3 lines starting with the current one
    /els<cr> position the cursor on else
    p        put the content of the default register after the cursor

y2j7Gp
    y2j      yank until 2 lines below
    7G       move the cursor to line 7
    p        put the content of the default register after the cursor

3yy}P
    3yy      yank 3 lines starting with the current one
    }        place the cursor on the next blank line        
    P        put the content of the default register before the cursor

V2j:t+3
    V2j      visually select linewise until 2 lines below
    :        enter command-line mode, a range is inserted for you
    t+3      copy the selected lines after line (current line + 3)

:4,6t7
    :        enter command-line mode
    4,6      the line numbers of the block you want to copy, see :help range
    t7       copy those lines after line 7
romainl
sumber