ทำความเข้าใจกับการผสมผสาน CTRL-U


19

ในคำตอบนี้ฉันต้องเผชิญกับการCTRL-Uใช้งานในการเรียกใช้ฟังก์ชั่นหลัง:และก่อนชื่อฟังก์ชั่นจริง

:nnoremap <buffer> <cr> :<C-U>call append('.', repeat([''],v:count1))<cr>

นี่คือสิ่งที่ช่วยพูดว่า:

CTRL-U      Scroll window Upwards in the buffer.  The number of
            lines comes from the scroll option (default: half a
            screen).  If [count] given, first set the 'scroll'
            option to [count].

ฉันลองด้วยตัวเองและใช้งานได้ตามที่ควร แต่ฉันไม่เข้าใจส่วนที่เกี่ยวกับscrollตัวเลือก พวกเขาหมายถึง'scroll' optionอะไร

และนอกจากนี้ยังมีบางสิ่งที่แปลกในโหมดแทรก เท่าที่ฉันเข้าใจมันจะลบทุกอย่างตั้งแต่เคอร์เซอร์จนถึงจุดเริ่มต้นของบรรทัดจากนั้นรวมบรรทัดผลลัพธ์และบรรทัดด้านบน

คำตอบ:


27

ความช่วยเหลือตามค่าเริ่มต้นจะส่งคืนการแมปใด ๆ ที่ใช้กับโหมดปกติ ในโหมดปกติ<C-u> จะเลื่อนขึ้นไป แต่นั่นไม่ใช่สิ่งที่เรากำลังสนใจใน. ในการมองเห็นสิ่งที่<C-u>ไม่อยู่ในโหมดบรรทัดคำสั่งหรือcmode (โหมดที่คุณพิมพ์คำสั่งเริ่มต้นด้วยลำไส้ใหญ่) การค้นหา:h c_CTRL-u

                            *c_CTRL-U*
CTRL-U      Remove all characters between the cursor position and
        the beginning of the line.  Previous versions of vim
        deleted all characters on the line.  If that is the
        preferred behavior, add the following to your .vimrc: >
            :cnoremap <C-U> <C-E><C-U>

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

:.,.+4

นี่คือช่วง

ตอนนี้ลองพิมพ์5:<C-u>และดูว่าเกิดอะไรขึ้น คุณควรเห็น

:

ในทำนองเดียวกันในโหมดภาพการกด:แทรกช่วง

:'<,'>

นั่นเป็นเหตุผลที่คุณจะเห็นการแมปบ่อยเช่น:

nnoremap foo :<C-u>bar

หรือ

xnoremap foo :<C-u>bar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.