กำหนดคำสั่งที่กำหนดเองสำหรับการลงทะเบียน * และ +


9

หากฉันใช้ build Vim พร้อมxterm_clipboardฟีเจอร์เนื้อหาคลิปบอร์ดของระบบจะพร้อมใช้งานผ่านการ+ลงทะเบียน

หากบิลด์ที่ฉันใช้อยู่ไม่มีคุณสมบัตินี้ฉันจะทำให้การ"+ลงทะเบียนเรียกโปรแกรมที่กำหนดเองของฉันเพื่อดึงข้อมูลและตั้งค่าคลิปบอร์ดของระบบ ( xsel -boและxsel -biหรือด้วยxclipหรือไม่) ในทำนองเดียวกันกับ"*ที่จะเรียกและxsel -poxsel -pi

ประเด็นคือสามารถพิมพ์สิ่งที่ชอบ"+pโดยไม่ต้องกังวลว่าคุณลักษณะนั้นจะพร้อมใช้งานหรือไม่ พิมพ์ดีด:r !xsel -b<Enter>ไม่ได้เป็นสิ่งที่ฉันกำลังมองหา: ฉันต้องการการกดแป้นพิมพ์เดียวกันในการทำงานและฉันต้องการวางสายพันธุ์ที่จะทำตามสิ่งที่มีอยู่สำหรับการลงทะเบียน“จริง” ( P, gp, ... )

โบนัส: ฉันสามารถกำหนดคำสั่งที่กำหนดเองสำหรับชื่อการลงทะเบียนอื่น ๆ ได้หรือไม่

คำตอบ:


7

การ<expr>ทำแผนที่บางอย่างควรจะสามารถทำงานได้ที่นี่ โครงสร้างพื้นฐานจะเป็นอย่างไร

function! ClipboardOrXclip(command, register)
    if a:register !~ '[+*]' || has('xterm_clipboard') || has('gui_running')
        " Just return the original command if the clipboard is accessible
        " or it's not a register that should be handled by xsel
        return a:command
    endif
    if a:register == '+'
        return "<Esc>:r !xsel -bo<CR>"
    else
        return "<Esc>:r !xsel -po<CR>"
    endif
endfunction

nnoremap <silent> <expr> p ClipboardOrXclip('p', v:register)

ฟังก์ชั่นจะต้องมีการขยายตัวในการจัดการรูปแบบทั้งหมดของp, P, gpฯลฯ แต่นี้ควรจะเริ่มต้นที่ดี


ดูเหมือนว่าจะเป็นเส้นทางที่ถูกต้อง แต่มันไม่ทำงาน ข้อความธรรมดาp(ที่ไม่มีชื่อก่อนหน้า"และชื่อลงทะเบียน) จะไม่ทำสิ่งใดนอกจากชื่อ"pปรากฏในบรรทัดสถานะ "apเทียบเท่ากับa, "bpดังขึ้น ... ฉันไม่ได้รับตรรกะ "+เสียงบี๊บทันทีฉันไม่แม้แต่จะบอกว่าฉันหมายถึง+หรือ*เป็นชื่อลงทะเบียน
Gilles 'หยุดชั่วร้าย'

1
สมมติว่าปัญหาพื้นฐานเหล่านี้ได้รับการแก้ไขมีรายการคำสั่งที่ครบถ้วนสมบูรณ์ที่ฉันต้องการแทนที่หรือไม่ ชุดดูน่ากลัวโดยเฉพาะอย่างยิ่งถ้าฉันต้องการสนับสนุน yanking เช่นกัน
Gilles 'หยุดความชั่วร้าย'

@Gilles อัปเดตเพื่อแก้ไขพฤติกรรมด้วยการลงทะเบียนที่ไม่ใช่ - / * ปัญหาที่เกิดขึ้น"+เมื่อเสียงเรียกเข้าของคุณ-xterm_clipboardนั้นยากกว่าเพราะมันไม่เคยเข้าฟังก์ชั่นนี้ การระบุ register ที่ไม่ถูกต้อง ( +) จะยกเลิกคำสั่ง ดังนั้นจึงดูเหมือนว่าพฤติกรรมจริงจะต้องมีการคว่ำดังนั้นแผนที่"+หรือ"*แล้วจัดการกับคำสั่งที่ระบุโดยผู้ใช้ ...
jamessan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.