เลื่อนหนึ่งในสี่ (25%) ของหน้าจอขึ้นหรือลง


15

ฉันมักจะพบว่าการเลื่อนหน้าเต็มทำให้สับสนเกินไปครึ่งหน้ามากเกินไป แต่หน้าไตรมาสเหมาะ ขณะนี้ฉันทำได้เพียงกดปุ่มลูกศรค้างไว้

ฉันจะเลื่อน 25% ของหน้าขึ้นและลงได้อย่างง่ายดายได้อย่างไร


1
ตรวจสอบฟังก์ชั่นกากบาทในคำตอบนี้: stackoverflow.com/a/3102890
Sundeep

คำตอบ:


20

อาจctrldและctrluอาจเป็นสิ่งที่คุณกำลังมองหา โดยค่าเริ่มต้นพวกเขาย้ายครึ่งหนึ่งของหน้าจอ

จาก:h CTRL-D:

เลื่อนหน้าต่างลงด้านล่างในบัฟเฟอร์ จำนวนบรรทัดมาจากตัวเลือก 'เลื่อน' (ค่าเริ่มต้น: ครึ่งหน้าจอ)

หากกำหนด [นับ] ให้ตั้งค่าตัวเลือก 'เลื่อน' เป็น [นับ]

ซึ่งหมายความว่าในครั้งแรกที่คุณต้องการเลื่อนในหน้าต่างคุณสามารถทำได้XXctrldโดยที่ XX คือ 25% ของจำนวนบรรทัดในหน้าต่างของคุณ เมื่อตั้งค่าscrollเป็น XX คุณสามารถใช้ctrldและctrluย้าย 25% ของหน้าจอ

นอกจากนี้ฉันคิดว่ามัน:h scrollingอาจจะน่าสนใจสำหรับคุณ


แก้ไข

และนี่เป็นอีกวิธีการแก้ปัญหาที่มีฟังก์ชั่นและการแมปบางอย่างเพื่อเพิ่มใน.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>

ฟังก์ชั่นจะได้รับความสูงของหน้าต่างปัจจุบันและตามพารามิเตอร์ของมันจะเลื่อนหน้าจอขึ้นหรือลงหนึ่งในสี่ของความสูง

การแมปจะเรียกใช้ฟังก์ชั่นอันแรกที่ขึ้นไปและอันที่สองลงไป

แน่นอนคุณสามารถเปลี่ยน<up>และ<down>ใช้ปุ่มอื่นบางปุ่มได้หากคุณต้องการรักษาการทำงานเริ่มต้นของปุ่มลูกศร


2
ดูเหมือนว่ามันอาจสมเหตุสมผลกว่าที่จะใช้ctrl-Eและctrl-Yในการจับคู่เนื่องจากก) จากนั้นคุณจะมีทางลัดแยกต่างหากสำหรับการเลื่อนทั้ง 1/2 หน้าและ 1/4 หน้า ข) พฤติกรรมของctrl-U/ ctrl-Dสอดคล้องกันและไม่ขึ้นอยู่กับว่าคุณเคยใช้การจับคู่หรือไม่
Rich

ฉันไม่เข้าใจบันทึกย่อที่สำคัญของคุณ คุณหมายถึงอะไรป้อนด้วยตนเอง กำลังใช้สิ่งนี้ลบบรรทัดแทนการย้ายหน้า
Louis Hong

@LouisHong ดูบรรทัดส่วนระหว่างราคาคู่จะหมายถึงการเป็นตัวแทนของรหัสที่สำคัญของlet key="^U" ctrl+uดังนั้นถ้าคุณคัดลอกฟังก์ชั่นในกลุ่มวางเคอร์เซอร์ของคุณในราคาคู่ตีครั้งแรกci"ในการปรับเปลี่ยนเนื้อหาของคำพูดและจากนั้นกดctrl+vตามเดียวกันในบรรทัดctrl+u let key="^D"
statox

@ Rich: ใช่นั่นเป็นจุดที่ดี ฉันใช้ปุ่มลูกศรเพราะนั่นคือสิ่งที่ OP บอกว่าเขาใช้ แต่ประเด็นของคุณมีความเกี่ยวข้อง
statox

@statox คุณเข้าใจฉันผิด! (ฉันไม่ชัดเจน) ฉันหมายถึงใช้แทนlet key="^Y" let key="^U"มันจะสร้างพฤติกรรมเดียวกัน แต่ไม่มีผลต่อการ'scroll'ตั้งค่า
รวย

3

คุณสามารถใช้ctrleและctrlyเพื่อย้ายหน้าโดยหนึ่งบรรทัดขึ้นและลง

จากนั้นถ้าคุณต้องการให้ +/- 25% ที่จะถูกย้ายคุณสามารถใช้20ctrleและที่จะย้ายคุณลง 20 บรรทัด

นี่เป็นคำถามที่อธิบายได้ดีที่คุณคุ้นเคย: /programming/3458689/how-to-move-screen-without-moving-cursor-in-vim


3

ฉันเปลี่ยนวิธีการของสแต๊กซ์เพื่อให้เลื่อนได้สอดคล้องกันมากกว่า linewraps หากคุณต้องการหนึ่งในสี่ขั้นตอนเปลี่ยน 0.618 กลับเป็น 0.25 หรืออะไรก็ตาม

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>

0

หากคุณต้องการคำตอบทั่วไปที่ดีและไม่ใช่ 25% ที่แน่นอนคุณสามารถคำนึงถึงจำนวนบรรทัดปกติบนหน้าเว็บโดยหารด้วย 25 และตั้งค่าการแมประบบ ตัวอย่างเช่นหากคุณปกติมีประมาณ 100 บรรทัดบนหน้าจอในแต่ละครั้งดังนั้น 25% ของที่เป็น 25 บรรทัดดังนั้นคุณสามารถตั้งค่าการทำแผนที่ที่สำคัญในสิ่งที่ต้องการทุน J และ K ของคุณสำหรับการเลื่อนขึ้นและลง 25 บรรทัดอย่างรวดเร็ว

noremap J 25j
noremap K 25k

หากคุณต้องการที่จะข้ามไปยังเครื่องหมายไตรมาสของไฟล์ทั้งหมดจากนั้นในโหมดปกติเพียงแค่พิมพ์:

25%

1
ฉันคิดว่าโซลูชันของคุณมีข้อเสียอยู่สองประการ: noremap J 25jhardcodes ค่า25ดังนั้นเมื่อคุณแยกหน้าต่าง 100 บรรทัดในแนวนอนการแมปของคุณจะนำทาง 50% ของหน้าต่างใหม่ เกี่ยวกับตัวเลือกที่สองของคุณ:25%ฉันไม่รู้ว่ามันมีอยู่จริง แต่จากการทดสอบของฉันดูเหมือนว่ามันจะวางเคอร์เซอร์บนตำแหน่งตามบรรทัดแรก: ถ้าฉันมีบัฟเฟอร์ 100 บรรทัดและฉันต้องการย้าย 25% การพิมพ์ล่วงหน้า:25%จะทำให้ฉัน ที่บรรทัด 25 ไม่ว่าเคอร์เซอร์ของฉันจะอยู่ที่ใด คุณช่วยกรุณาใส่หัวข้อความช่วยเหลือที่อธิบายคุณสมบัตินี้ฉันไม่พบมันในเอกสารหรือไม่?
statox

1
ฉันพบหัวข้อความช่วยเหลือที่:h N%:-)
statox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.