Gulir seperempat (25%) layar ke atas atau ke bawah

14

Saya sering menemukan menggulir halaman penuh terlalu membingungkan, setengah halaman terlalu banyak, tetapi seperempat halaman tepat. Saat ini saya melakukannya hanya dengan menahan tombol panah.

Bagaimana cara saya menggulir 25% halaman ke bawah dan ke atas dengan mudah?

Louis Hong
sumber
1
periksa fungsi dicoret dalam jawaban ini: stackoverflow.com/a/3102890
Sundeep

Jawaban:

19

Mungkin ctrlddan ctrlubisa jadi apa yang Anda cari. Secara default mereka memindahkan separuh layar.

Dari :h CTRL-D:

Gulir jendela ke bawah dalam buffer. Jumlah garis berasal dari opsi 'gulir' (default: setengah layar).

Jika [hitung] diberikan, atur dulu opsi 'gulir' ke [hitung].

Yang berarti bahwa pertama kali Anda ingin menggulir di jendela Anda dapat melakukan di XXctrldmana XX adalah 25% dari jumlah baris di jendela Anda. Saat scrollnilai XX ditetapkan , Anda dapat menggunakan ctrlddan ctrlumemindahkan 25% layar.

Juga, saya pikir itu :h scrollingmungkin menarik untuk Anda.


Edit

Dan berikut ini adalah solusi lain dengan fungsi dan beberapa pemetaan untuk ditambahkan ke Anda .vimrc:

function! ScrollQuarter(move)
    let height=winheight(0)

    if a:move == 'up'
        let key="\<C-Y>"
    else
        let key="\<C-E>"
    endif

    execute 'normal! ' . height/4 . key
endfunction

nnoremap <silent> <up> :call ScrollQuarter('up')<CR>
nnoremap <silent> <down> :call ScrollQuarter('down')<CR>

Fungsi akan mendapatkan ketinggian jendela saat ini, dan sesuai dengan parameternya akan menggulir layar ke atas atau ke bawah seperempat dari ketinggian.

Pemetaan akan memanggil fungsi, yang pertama naik dan yang kedua turun.

Tentu saja, Anda dapat mengubah <up>dan <down>ke beberapa tombol lain jika Anda ingin mempertahankan perilaku default tombol panah Anda.

statox
sumber
2
Sepertinya itu mungkin lebih masuk akal untuk digunakan ctrl-Edan ctrl-Ydalam pemetaan, karena a). Anda kemudian memiliki pintasan terpisah untuk pengguliran 1/2 halaman dan 1/4 halaman. b). perilaku ctrl-U/ ctrl-Dkonsisten dan tidak bergantung pada apakah Anda sebelumnya menggunakan pemetaan.
Kaya
Saya tidak mengerti catatan penting Anda. Apa yang Anda masukkan secara manual? Saat ini menggunakan ini menghapus garis alih-alih memindahkan halaman.
Louis Hong
@LouisHong Lihat baris let key="^U"bagian antara kutipan ganda dimaksudkan untuk mewakili kode kunci ctrl+u. Jadi, jika Anda menyalin fungsi di vim, letakkan kursor Anda pada klik tanda kutip ganda pertama ci"untuk mengubah konten tanda kutip dan kemudian tekan ctrl+vdiikuti oleh ctrl+uyang sama pada baris let key="^D".
statox
@ Rich: Yup, itu poin yang bagus. Saya menggunakan tombol panah karena itulah yang dikatakan OP yang digunakannya tetapi poin Anda relevan.
statox
@statox Anda salah paham! (Saya tidak jelas). Maksud saya gunakan let key="^Y"alih-alih let key="^U". Ini akan menciptakan perilaku yang sama tetapi tanpa mempengaruhi 'scroll'pengaturan.
Kaya
3

Anda dapat menggunakan ctrledan ctrlyuntuk memindahkan halaman dengan satu baris ke atas dan ke bawah.

Kemudian jika Anda ingin +/- 25% dipindahkan, Anda dapat menggunakan 20ctrledan itu akan memindahkan Anda 20 baris ke bawah.

Berikut ini juga pertanyaan yang dijelaskan dengan baik yang serupa dengan Anda: /programming/3458689/how-to-move-screen-without-moving-cursor-in-vim

A. Dziedziczak
sumber
3

Saya memvariasikan pendekatan statox sehingga menggulir lebih konsisten di atas linewraps. Jika Anda ingin seperempat langkah, ubah 0,618 kembali ke 0,25 atau apa pun.

function! ScrollGolden(move)
    let height=winheight(0)
    if a:move == 'up'
        let prep='L'
        " let key="^Y"
        let key='gk'
        let post='zb'
    elseif a:move == 'down'
        let prep='H'
        " let key="^E"
        let key='gj'
        let post='zt'
    endif
    execute 'normal! ' . prep . float2nr(round(height*0.618)) . key . post
endfunction
nnoremap <silent> <BS>    :call ScrollGolden('up')<CR>
nnoremap <silent> <Space> :call ScrollGolden('down')<CR>
Possum Gallo
sumber
0

Jika Anda menginginkan jawaban umum yang baik dan bukan 25% tepat, Anda dapat memperhitungkan jumlah garis normal pada halaman dengan membagi 25 dan mengatur beberapa pemetaan sistem. Misalnya jika Anda biasanya memiliki sekitar 100 garis pada layar pada suatu waktu maka 25% dari itu adalah 25 garis sehingga Anda dapat mengatur pemetaan kunci pada sesuatu seperti modal Anda J dan K untuk dengan cepat bergerak naik dan turun 25 garis

noremap J 25j
noremap K 25k

Jika Anda hanya ingin melompat ke tanda seperempat dari seluruh file maka dalam mode normal cukup ketik:

25%
Gajit
sumber
1
Saya pikir ada dua kelemahan dengan solusi Anda: noremap J 25jhardcodes nilai 25sehingga ketika misalnya Anda secara horizontal membagi 100 baris jendela pemetaan Anda sebenarnya akan menavigasi 50% dari jendela baru. Tentang opsi kedua Anda, :25%saya tidak tahu itu ada tetapi dari tes saya tampaknya menempatkan kursor pada posisi berdasarkan baris pertama: jika saya memiliki buffer 100 baris dan saya ingin bergerak 25% mengetik ke depan :25%akan membawa saya pada baris 25 di mana pun kursor saya berada. Bisakah Anda memasukkan topik bantuan yang menjelaskan fitur ini yang tidak dapat saya temukan di dalam dokumen?
statox
1
Saya menemukan topik bantuan di :h N%:-)
statox