: อ่านหลังเคอร์เซอร์แทนที่จะเป็นหลังบรรทัด


11

ฉันใช้:r !uuidgenบ่อยครั้งเพื่อแทรก uuid ใหม่ลงในบัฟเฟอร์ ใช้งานได้ แต่โดยทั่วไปฉันพยายามแทรก uuid ระหว่างเครื่องหมายคำพูดและ:r !uuidgenพิมพ์ uuid ในบรรทัดใหม่

เพื่อแก้ไขปัญหานี้ฉันกำลังใช้ keymap ง่ายๆ:

nnoremap <C-u> mm:r!uuidgen<CR>dW"_dd`mp

มาโครนี้ตั้งเครื่องหมายmmแทรก uuid r!uuidgenลบ uuid ที่แทรกไว้dWลบบรรทัดพิเศษ"_ddกลับไปที่เครื่องหมายBACKTICKmและวาง uuid ในpที่สุด

มีวิธีการ:rทางขวาหลังจากเคอร์เซอร์ที่ไม่มีมาโคร / การผูกคีย์ที่ทำให้การรีจิสเตอร์เสียหรือเปล่า?


1
คำถาม SUก็มีวิธีแก้ไขเช่นนี้
muru

คำตอบ:


8

คุณสามารถใช้นิพจน์รีจิสเตอร์"=และsystem():

<C-r>=system("uuidgen | tr -d '\n'")<CR>

ดูเหมือนว่าในการแมปโหมดแทรก:

inoremap <key> <C-r>=system("uuidgen | tr -d '\n'")<CR>

หรือด้วยการทำแผนที่การแสดงออก:

inoremap <expr> <key> system("uuidgen \| tr -d '\n'")

5

จากโหมดแทรกคุณสามารถกดCtrl-Rและพิมพ์:

=system('uuidgen')

โปรดทราบว่าสิ่งนี้จะเพิ่มบรรทัดใหม่ที่ต่อท้ายเพราะนั่นคือสิ่งที่uuidgenส่งออก เพื่อแก้ไขปัญหานี้เราสามารถใช้:

=system('uuidgen')[:-2]

เพื่อลบบรรทัดใหม่

จาก:help i_CTRL-R:

ใส่เนื้อหาของการลงทะเบียน ระหว่างการพิมพ์ CTRL-R และอักขระตัวที่สอง '' 'จะปรากฏขึ้นเพื่อระบุว่าคุณคาดว่าจะป้อนชื่อของการลงทะเบียน

[ .. ]

'=' การลงทะเบียนนิพจน์: คุณได้รับพร้อมท์ให้ใส่นิพจน์ (ดูที่นิพจน์)

หากต้องการผูกสิ่งนี้กับCtrl-uตัวอย่างของคุณคุณสามารถใช้:

nnoremap <C-u> i<C-r>=system('uuidgen')[:-2]<CR><Esc>

2

อีกหนึ่งด้วย:python:

:py import uuid, vim; vim.command(':normal i' + str(uuid.uuid1()))

คุณสามารถแมปเป็น:

:inoremap <key> <esc>:py import uuid, vim; vim.command(':normal a' + str(uuid.uuid1()))<cr>a

UUIDs จะถูกสร้างโดยโมดูลหลาม UUID


1
นี่เป็นวิธีที่ค่อนข้างบิดไปมา
muru

0

บางทีนี่อาจจะดีกว่าการใช้โซลูชัน pure-vim แต่ถ้าคุณใช้ snippet manager เช่นUltisnipsคุณสามารถลองเพิ่ม snippet ได้ดังต่อไปนี้:

snippet uuid "insert new uuid" w
`uuidgen`
endsnippet

วิธีนี้คุณสามารถพิมพ์uuidและกดไกขยายของคุณในโหมดแทรกและuuidจะถูกแทนที่ด้วยเอาต์พุตของคำสั่งเชลล์ที่เกี่ยวข้อง แน่นอนว่าสิ่งนี้สามารถปรับเปลี่ยนได้อย่างง่ายดายสำหรับคำสั่งอื่น ๆ และขยายออกไปในวิธีที่ทรงพลังตามที่ระบุไว้ในเอกสาร Ultisnips

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