Apa cara termudah untuk memasukkan en dash di Vim?

33

Untuk menyisipkan en dash , saya menggunakan ^v u 2014tujuh penekanan tombol. Apakah ada cara yang lebih mudah? (Saya sedang melihat digraf dan tidak menemukan en dash di sana.)

Tomas Tomecek
sumber
4
FYI, U + 2014 adalah EM DASH. U + 2013 adalah EN DASH. fileformat.info/info/unicode/char/2014/index.htm , fileformat.info/info/unicode/char/2013/index.htm
Quincy Bowers
7
Jika Anda menggunakan X11, saya akan mengatakan XCompose ... Karena ini akan bekerja pada semua aplikasi Anda, dan bukan hanya Vim. Atau jika Anda menggunakan OSX atau Windows, fasilitas yang disediakan oleh OS.
Martin Tournoij
Mungkin bukan cara termudah , tapi saya cenderung menggunakannya <Ctrl-Shift-U>2013<Space>karena berfungsi di mana-mana. Beberapa kode kunci berjalan jauh (saya terutama menggunakan U + 2013, U + 2014, U + 2026, U + 2212, U + 2192, U + B0; - / - /… / - / → / °).
wchargin
Karena penasaran, bagaimana Anda menampilkan en dash? AFAIK, tidak ada cara untuk menampilkan font dengan lebar tidak tetap dengan benar (yaitu dengan lebar dan kerning karakter yang tidak seragam), jadi em-dan en-dash selalu terlihat persis seperti tanda hubung yang meluas ke tepi ekstrim batas karakter. Apakah Anda tidak keberatan memiliki keterputusan yang ekstrem antara bagaimana karakter ditampilkan di Vim dan bagaimana ia ditampilkan di tempat lain?
Kyle Strand
2
Saya dengan @Carpetsmoker: Compose - - -untuk em-dash, Compose - - .untuk en-dash. Tulisan itu ajaib, terutama jika Anda memetakannya ke Caps-Lock yang sama sekali tidak digunakan.
Rmano

Jawaban:

42

Anda dapat menggunakan digraf: Ctrl+k-N(dengan modal N)

Dalam mode Sisipkan, digraf dimasukkan dengan Ctrl+kdiikuti oleh urutan dua karakter. Untuk en-dash, urutannya adalah -N.

Seperti yang ditunjukkan Quincy, U+2014adalah em-dash. Jika Anda ingin memasukkan yang menggunakan digraf, urutannya adalah -M.

tommcdo
sumber
Demikian juga, EM DASH dapat dimasukkan dengan <Ck> -M.
Quincy Bowers
U+2014bukan en-dash? seluruh hidupku adalah dusta! Sunting: sekarang saya mengerti: font terminal saya (Inconsolata) menerjemahkan kedua tanda hubung dengan cara yang sama.
Tomas Tomecek
3
Untuk sampai pada jawaban ini: hex 2013 adalah desimal 8211. Gunakan :digraphsperintah untuk menampilkan semua digraf, dan cari 8211.
200_success
10

Jika tidak ada digraf yang telah ditentukan atau Anda menginginkan urutan kunci yang lebih mudah diingat, maka Anda dapat mendefinisikan digraf di vimrc Anda. Sebagai contoh, di bawah ini akan mendefinisikan dua digraf untuk en dash (8211) dan em dash (8212) yang mencerminkan urutan XCompose mereka.

digraph -. 8211 -- 8212

The :digraphperintah mengharapkan nilai yang akan ditentukan dalam desimal daripada hex, yang mengapa itu 8211 untuk en lari daripada 2013.

jamessan
sumber
Penggambaran
1
@ 200_sukses Saya tidak mengatakan itu tidak. :) Pilihan digraf Vim tidak selalu selaras dengan yang lebih standar, jadi mengetahui cara mendefinisikan digraf Anda sendiri bermanfaat, bahkan jika sudah ada.
jamessan
8

Cara standar memasukkan en dasbor di Vim adalah dengan menggunakan digraf, seperti yang dijelaskan tommcdo .

Namun, saya menemukan digraf pada umumnya, dan khususnya yang satu ini ( Ctrl+k, -, Shift+N) cukup canggung untuk mengetik. Untuk input tanda hubung yang lebih cepat, Anda bisa menambahkan pasangan pemetaan mode-insert berikut ke file tipe file, seperti .vim/after/ftplugin/markdown.vim.

Untuk tanda hubung en / em, masing-masing:

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

NB Cara <buffer>pemetaan ini hanya akan berlaku untuk file Penurunan harga. Ini perlu karena ada beberapa konteks (misalnya pemrograman) di mana saya tidak ingin dua tanda hubung diganti dengan tanda hubung.

Pemetaan ini mengambil keuntungan dari kenyataan bahwa dalam konteks saya biasanya menggunakannya, en strip dikelilingi oleh spasi, dan em strip tidak . * Oleh karena itu, menggunakan pemetaan ini berarti bahwa saya dapat menggunakan penekanan tombol yang persis sama dalam editor teks yang kurang mampu yang terkadang saya paksa untuk menggunakan dan masih mendapatkan output yang masuk akal. **

Saya sebenarnya menggunakan solusi yang sedikit lebih rumit dari yang di atas, karena, untuk alasan tipografi, saya suka mengelilingi em-dash saya dengan ruang rambut . Memiliki ini dalam Markdown membuatnya kurang mudah dibaca, tetapi untungnya, Vim memiliki solusi untuk ini, dengan fungsi "menyembunyikan", yang memungkinkan Anda untuk menyembunyikan item sintaksis tertentu ketika kursor berada pada baris yang berbeda: ***

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

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

* Jika saya perlu menggunakan en dasbor tanpa spasi, maka saya cukup menekan backspace setelah mengetik pemetaan.
** Jika Anda biasanya tidak menggunakan en-dash seperti ini, atau jika Anda tidak pernah berani keluar dari Vim, Anda bisa menggunakan sesuatu yang lain untuk memicu pemetaan: misalnya --.dan ---. Jika Anda menggunakan pemicu lain, Anda juga bisa menempatkan ini langsung di .vimrc Anda, dan menghapus <buffer>opsi.
*** Anda juga dapat menggunakan karakter tersembunyi ccharuntuk mengganti item sintaks dengan karakter tunggal, alih-alih menyembunyikannya sepenuhnya. Jika Anda khawatir tentang masalah penyandian, Anda dapat menggunakan ini untuk membuat Vim menampilkan &ndash;entitas HTML dalam file sebagai en dashes.

Kaya
sumber
Jadi Anda menggunakan tanda hubung di Vim? Tidakkah mereka terlihat aneh, karena mereka hanya diberi lebar satu kolom? Apakah Anda tahu ada trik untuk membuat em-strip benar-benar memakan banyak ruang, mungkin bernilai dua kolom?
Kyle Strand
@KyleStrand Bagaimana Anda ingin mendapatkan hacky? Coba ini: set conceallevel=1 | syntax match longdash '—' conceal cchar=-(Perhatikan bahwa tanda hubung pertama dalam perintah ini adalah em-tanda hubung, dan yang kedua adalah tanda hubung minus-lebar penuh.)
Rich
Saya tidak melihat perbedaan dalam tampilan, atau melihat mengapa itu akan membuat tampilan mengambil dua kolom. Apakah Anda secara kebetulan salah mengerti pertanyaan saya, atau apakah saya mungkin salah memahami saran Anda?
Kyle Strand
.... sebenarnya, saya tidak tahu apa-apa tentang spesifikasi sintaks Vim. Apakah syntax matchperintah bahkan bekerja di luar konteks file sintaks?
Kyle Strand
@KyleStrand Saya mengerti pertanyaan Anda. Apakah Anda mencoba menyalin garis itu ke vimrc Anda? Atau hanya menjalankannya di Vim? :)
Rich
3

Pada keyboard Mac AZERTY Prancis saya, saya dapat memasukkan en dash dengan Alt+ -. Jarak tempuh Anda mungkin sangat beragam.

romainl
sumber
2
Alt+-(atau lebih tepatnya Option+-bertele-tele) adalah jalan pintas khusus-Mac. Ia bekerja di mana-mana di OS X, tetapi tidak terkait dengan vi atau vim.
ash108
1
Bekerja di MacVim, tetapi di Terminal vim berfungsi seperti [Esc] diikuti oleh -, sehingga beralih ke mode Normal dan meletakkan kursor di awal baris sebelumnya.
200_sukses
3

Instal plugin unicode saya , masukkan Vim dan ketik DASH diikuti oleh CtrlXCtrlZuntuk mengaktifkan penyelesaian unicode.

masukkan deskripsi gambar di sini

(Perhatikan -N dalam deskripsi yang menunjukkan digraf untuk memasukkan karakter itu)

Christian Brabandt
sumber
0

Terinspirasi oleh jawaban hebat Rich, saya telah menambahkan baris berikut ke vimrc saya:

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

Bekerja seperti hadiah!

Will Wright
sumber
0

Untuk en dash sebuah digraf adalah cara terbaik untuk pergi, seperti yang disarankan dalam berbagai jawaban lainnya. Tetapi untuk karakter unicode sewenang-wenang, cara lain adalah dengan menggunakan ^Vdalam mode insert (lihat :he i_CTRL-V_digit).

Misalnya, untuk en dash ^Vu2013.

gemetar
sumber
Saya menyadari sekarang bahwa ini sebenarnya apa yang sudah dilakukan OP! (Meskipun en dash adalah 2013, bukan 2014 - itu em dash.) Saya pikir ini masih bagus untuk memiliki suatu tempat di tumpukan jawaban, namun.
tremby