วิธีที่ง่ายที่สุดในการแทรก en dash ใน Vim คืออะไร?


33

ในการแทรกเส้นประฉันใช้^v u 2014ซึ่งเป็นปุ่มกดเจ็ดปุ่ม มีวิธีที่ง่ายกว่านี้ไหม? (ฉันดูที่กราฟิคและไม่พบจุดที่นั่น)


4
FYI, U + 2014 เป็น EM DASH U + 2013 เป็น EN DASH fileformat.info/info/unicode/char/2014/index.htm , fileformat.info/info/unicode/char/2013/index.htm
Quincy Bowers

7
ถ้าคุณใช้ X11 ฉันจะบอกว่า XCompose ... เพราะมันจะใช้ได้กับทุกแอปพลิเคชันของคุณไม่ใช่แค่ Vim หรือถ้าคุณอยู่บน OSX หรือ Windows สิ่งอำนวยความสะดวกที่ OS จัดเตรียมไว้ให้
Martin Tournoij

อาจไม่ใช่วิธีที่ง่ายที่สุดแต่ฉันมักจะใช้<Ctrl-Shift-U>2013<Space>เพราะใช้ได้ทุกที่ รหัสคีย์บางตัวไปไกล (ส่วนใหญ่ฉันใช้ U + 2013, U + 2014, U + 2026, U + 2212, U + 2192, U + B0; - / - / … / - / → / °)
wchargin

จากความอยากรู้คุณจะแสดงเครื่องหมายขีดกลางได้อย่างไร AFAIK ไม่มีวิธีที่จะแสดงแบบอักษรที่ไม่ใช่ความกว้างคงที่ได้อย่างถูกต้อง (เช่นที่มีความกว้างของอักขระที่ไม่สม่ำเสมอและการจัดช่องไฟ) ดังนั้นเครื่องหมายขีดคั่นและ en-dash จึงดูเหมือน hyphens ที่ขยายไปถึงขอบสุดของขอบเขตอักขระ คุณไม่สนใจที่จะตัดการเชื่อมต่อระหว่างตัวละครใน Vim กับตัวละครอื่น ๆ หรือไม่?
Kyle Strand

2
ฉันอยู่กับ @Carpetsmoker: Compose - - -สำหรับ em-dash, Compose - - .สำหรับ en-dash การเขียนเป็นสิ่งมหัศจรรย์โดยเฉพาะถ้าคุณแมปไปที่ Caps-Lock ที่ไม่ได้ใช้อย่างอื่น
Rmano

คำตอบ:


42

คุณสามารถใช้ digraphs: Ctrl+k-N(ด้วยทุนN)

ในโหมดแทรกจะมีการป้อน digraphs Ctrl+kตามด้วยอักขระสองตัว สำหรับ -Nen-ประลำดับคือ

ดังที่ควินซีชี้ให้เห็นว่าU+2014มันคือ em-dash หากคุณต้องการที่จะใส่ว่าการใช้ digraphs -Mลำดับคือ


เช่นเดียวกัน EM DASH สามารถแทรกด้วย <Ck> -M
Quincy Bowers

U+2014ไม่ได้เป็นเส้นประ? ทั้งชีวิตของฉันเป็นเรื่องโกหก! แก้ไข: ตอนนี้ฉันเข้าใจแล้ว: ฟอนต์เทอร์มินัลของฉัน (Inconsolata) ทำให้ทั้งคู่พุ่งด้วยวิธีเดียวกัน
Tomas Tomecek

3
เพื่อให้ได้คำตอบนี้ hex 2013 คือเลขทศนิยม 8211 ใช้:digraphsคำสั่งเพื่อแสดงdigraph ทั้งหมดและมองหา 8211
200_success

10

หากไม่มี digraph ที่กำหนดไว้ล่วงหน้าหรือคุณต้องการลำดับคีย์ที่น่าจดจำมากขึ้นคุณสามารถกำหนด digraphs ใน vimrc ของคุณได้ ตัวอย่างเช่นด้านล่างจะกำหนดสอง digraphs สำหรับ en dash (8211) และ em dash (8212) ซึ่งแสดงลำดับ XCompose ของพวกเขา

digraph -. 8211 -- 8212

:digraphคำสั่งคาดว่าค่าที่จะระบุไว้ในทศนิยมมากกว่าหกเหลี่ยมซึ่งเป็นเหตุผลที่มันเป็น 8211 สำหรับ en รีบมากกว่า 2013


มีการสร้าง
dig dig

1
@ 200_ สำเร็จฉันไม่ได้บอกว่าไม่ใช่ :) ตัวเลือก digraph ของ Vim ไม่ได้สอดคล้องกับมาตรฐานมากกว่าเสมอดังนั้นการรู้วิธีกำหนด digraph ของคุณเองนั้นมีประโยชน์แม้ว่าจะมีอยู่แล้วก็ตาม
jamessan

8

วิธีมาตรฐานในการแทรกห้องน้ำเส้นประในกลุ่มคือการใช้เดี่ยวเป็นtommcdo อธิบาย

แต่ผมหา digraphs ทั่วไปและโดยเฉพาะอย่างยิ่งคนนี้ ( Ctrl+k, -, Shift+N) สวยอึดอัดใจที่จะประเภท สำหรับการป้อนข้อมูลที่เร็วขึ้นของขีดกลางคุณสามารถเพิ่มคู่ต่อไปของแมปแทรกโหมดไปยังแฟ้ม filetype .vim/after/ftplugin/markdown.vimเช่น

สำหรับเครื่องหมายขีดคั่น en / em ตามลำดับ:

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- —

NB <buffer>หมายถึงการจับคู่นี้จะใช้กับไฟล์ Markdown เท่านั้น สิ่งนี้จำเป็นเนื่องจากมีบริบทบางอย่าง (เช่นการเขียนโปรแกรม) ที่ฉันไม่ต้องการให้ขีดกลางสองอันถูกแทนที่ด้วยเครื่องหมายขีดคั่น

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

ที่จริงผมใช้วิธีการแก้ปัญหาเล็กน้อยที่ซับซ้อนมากขึ้นนอกเหนือจากข้างต้นเพราะสำหรับเหตุผลการพิมพ์ผมชอบที่จะล้อมรอบ EM-ขีดคั่นของฉันกับช่องว่างผม การมีสิ่งเหล่านี้ใน Markdown ทำให้อ่านไม่ได้ แต่โชคดีที่ Vim มีวิธีแก้ปัญหานี้ด้วยฟังก์ชั่น "ปกปิด" ซึ่งช่วยให้คุณซ่อนรายการไวยากรณ์บางอย่างเมื่อเคอร์เซอร์อยู่ในบรรทัดที่แตกต่าง: ***

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- &#8202;—&#8202;

syntax match entity_hairspace "&#8202;" conceal
setl conceallevel=2

* ถ้าฉันจำเป็นต้องใช้การเว้นวรรคแบบไม่มีการขีดเส้นใต้ฉันสามารถกด backspace หลังจากพิมพ์การแมป
** หากคุณไม่ได้โดยทั่วไปใช้ en-ขีดกลางเช่นนี้หรือถ้าคุณไม่เคยร่วมออกเป็นกลุ่มของคุณสามารถใช้อย่างอื่นที่จะเรียกแมป: เช่นและ--. ---หากคุณใช้ทริกเกอร์อื่นคุณสามารถวางสิ่งนี้ลงใน. vimrc ของคุณโดยตรงและลบ<buffer>ตัวเลือกต่างๆ
*** นอกจากนี้คุณยังสามารถใช้อักขระปกปิดccharเพื่อแทนที่รายการไวยากรณ์ด้วยอักขระเดียวแทนที่จะซ่อนไว้ทั้งหมด หากคุณกังวลเกี่ยวกับปัญหาการเข้ารหัสคุณสามารถใช้สิ่งนี้เพื่อรับ Vim เพื่อแสดง&ndash;เอนทิตี HTML ในไฟล์เมื่อมีขีดกลาง


ดังนั้นคุณใช้เครื่องหมายขีดคั่นเป็นกลุ่มหรือไม่ พวกเขาไม่ได้ดูแปลก ๆ เพราะพวกเขาจะได้รับเพียงความกว้างคอลัมน์เดียว? คุณรู้หรือไม่ว่ามีกลอุบายใด ๆ ในการทำเครื่องหมายขีดกลางจริง ๆ แล้วใช้พื้นที่จำนวนพอสมควรหรืออาจเป็นสองคอลัมน์ที่คุ้มค่า?
Kyle Strand

@KyleStrand คุณต้องการแฮ็คอย่างไร? ลองสิ่งนี้: set conceallevel=1 | syntax match longdash '—' conceal cchar=-(โปรดทราบว่าเครื่องหมายขีดแรกในคำสั่งนี้คือ em-dash และอันที่สองคือเครื่องหมายขีดคั่นแบบเต็มความกว้าง)
Rich

ฉันไม่เห็นความแตกต่างในการแสดงผลหรือดูสาเหตุที่ทำให้การแสดงผลใช้สองคอลัมน์ โดยบังเอิญคุณเข้าใจผิดคำถามของฉันหรือเป็นไปได้ว่าฉันเข้าใจผิดข้อเสนอแนะของคุณ?
Kyle Strand

.... ที่จริงฉันไม่รู้อะไรเกี่ยวกับการกำหนดไวยากรณ์ของ Vim ที่ไม่syntax matchสั่งได้ทำงานนอกบริบทของไฟล์ไวยากรณ์หรือไม่
Kyle Strand

@ KyleStrand ฉันเข้าใจคำถามของคุณ คุณลองคัดลอกบรรทัดนั้นไปยัง vimrc ของคุณหรือไม่ หรือเพียงแค่เรียกใช้เป็นกลุ่ม? :)
Rich

3

บนแป้นพิมพ์ภาษาฝรั่งเศส AZERTY Mac ของฉันฉันสามารถแทรกห้องน้ำประกับ+Alt -ระยะของคุณอาจแตกต่างกันอย่างเห็นได้ชัด


2
Alt+-(หรือค่อนข้างOption+-จะอวดรู้) เป็นทางลัดสำหรับ Mac โดยเฉพาะ มันทำงานได้ทุกที่ใน OS X แต่ไม่เกี่ยวข้องกับ vi หรือ vim
ash108

1
ใช้งานได้ใน MacVim แต่ใน Terminal vim จะทำหน้าที่เหมือน [Esc] ตามด้วย-ดังนั้นจึงเปลี่ยนเป็นโหมดปกติและวางเคอร์เซอร์ที่จุดเริ่มต้นของบรรทัดก่อนหน้า
200_success


0

ได้รับแรงบันดาลใจจากคำตอบที่ยอดเยี่ยมของ Rich ฉันได้เพิ่มบรรทัดต่อไปนี้ใน vimrc ของฉัน:

" For en/em dashes, respectively
autocmd FileType markdown imap -- –
autocmd FileType markdown imap --- —

ทำงานเหมือนการรักษา!


0

สำหรับคนที่ชอบการขุดกราฟเป็นวิธีที่ดีที่สุดที่จะไปตามคำแนะนำในคำตอบอื่น ๆ อีกมากมาย แต่สำหรับอักขระยูนิโค้ดโดยพลการอีกวิธีหนึ่งคือการใช้^Vในโหมดแทรก (ดู:he i_CTRL-V_digit)

สำหรับประ en ^Vu2013ที่ต้องการจะยกตัวอย่างเช่น


ตอนนี้ฉันรู้แล้วว่านี่เป็นสิ่งที่ OP กำลังทำอยู่! (แม้ว่า en dash คือ 2013 ไม่ใช่ 2014 - นั่นคือ em dash.) ฉันคิดว่านี่อาจจะดีถ้ามีที่ไหนสักแห่งในกองคำตอบ
tremby
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.