Vim'e en tire eklemenin en kolay yolu nedir?


33

Bir eklemek için tire , kullandığım ^v u 2014yedi basılmasını olan. Daha kolay bir yolu var mı? (Ben digraphs bakıyordum ve orada bir çizgi bulamadım.)



7
Eğer X11 kullanıyorsanız, XCompose'ı söyleyebilirim ... Bu sadece Vim'in değil tüm uygulamalarınızda işe yarayacağından. Veya OSX veya Windows kullanıyorsanız, OS'nin sağladığı olanaklar.
Martin Tournoij

Belki de en kolay yol değil ama kullanma eğilimindeyim <Ctrl-Shift-U>2013<Space>çünkü her yerde çalışıyor. Birkaç önemli kod uzun bir yol kat ediyor (çoğunlukla U + 2013, U + 2014, U + 2026, U + 2212, U + 2192, U + B0; - / - /… / - / → / ° kullanıyorum).
wchargin

Meraktan, çizgi nasıl gösteriliyor ? AFAIK, sabit genişlikte olmayan fontları düzgün şekilde göstermenin bir yolu yoktur (yani tek biçimli olmayan karakter genişlikleri ve karakter aralığı ile), bu nedenle çizgi ve çizgiler, her zaman karakter sınırının uç kenarına kadar uzanan tam tireler gibi görünür. Karakterin Vim'de nasıl gösterildiğiyle başka bir yerde nasıl gösterildiğinin arasında aşırı bir kopukluk olması sorun değil mi?
Kyle Strand

2
@Carpetsmoker ile birlikteyim: Compose - - -bir kısa çizgi için, kısa Compose - - .bir çizgi için. Oluşturma, özellikle kullanılmamış tamamen Caps-Lock ile eşleştirirseniz büyülüdür.
Rmano

Yanıtlar:


42

Digraphs kullanabilirsiniz: Ctrl+k-N(büyük harfle N)

Ekleme modunda, Ctrl+kiki karakter dizisi tarafından takip edilen digraph'lara girilir . En-dash için sıra -N.

Quincy'nin belirttiği gibi U+2014em-dash. Bunu kullanarak digraphs girmek isterseniz, dizisidir -M.


Aynı şekilde, <Dk> -M ile bir EM DASH eklenebilir.
Quincy Bowers

U+2014çizgi değil mi? tüm hayatım bir yalandı! Düzenleme: şimdi anladım: benim terminal yazı tipi (Inconsolata) her iki çizgi aynı şekilde işler.
Tomas Tomecek

3
Bu yanıt gelmesi için: altıgen 2013 Kullanım ondalık 8211. olduğu :digraphs8211. Tüm digraphs görüntülemek için komut ve göz
200_success

10

Önceden tanımlanmış bir digraph yoksa veya daha unutulmaz bir tuş sırası istiyorsanız, vimrc'nizde digraph'ları tanımlayabilirsiniz. Örneğin, aşağıdakiler en çizgi (8211) ve em çizgi (8212) için XCompose dizilerini yansıtan iki digraph tanımlayacaktır.

digraph -. 8211 -- 8212

:digraphKomut o tr çizgi yerine 2013 için 8211 neden olan değer ondalık ziyade onaltılık belirtilen bekliyor.


En çizgi digraph yerleşiktir.
200_success

1
@ 200_success Öyle olmadığını söylemedim. :) Vim'in digraph seçenekleri her zaman daha standart olanlarla aynı değildir, bu yüzden kendi digrafinizi nasıl tanımlayacağınızı bilmek, zaten varsa bile faydalıdır.
jamessan

8

Vim'e bir çizgi koymanın standart yolu tommcdo'nun açıkladığı gibi bir digraph kullanmaktır .

Ancak, genel olarak digraphs bulmak ve özellikle bu bir ( Ctrl+k, -, Shift+N) oldukça zor için gereklidir. Daha hızlı çizgi girişi için, aşağıdaki gibi bir ekleme modu eşlemesi çifti gibi bir dosya türü dosyasına ekleyebilirsiniz .vim/after/ftplugin/markdown.vim.

Sırasıyla en / em çizgilerinde:

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

Not: <buffer>Bu eşlemenin yalnızca Markdown dosyalarına uygulanacağı anlamına gelir. Bu, bazı bağlamlarda olduğundan gereklidir I (örn programlama) yok iki tire tire ile değiştirilmesi istiyoruz.

Bu eşlemeler, genellikle onları kullandığım bağlamlarda, çizgilerin boşluklarla çevrelenmiş olması ve çizgi değerlerinin olmamasından yararlanır . * Bu eşleştirmeler kullanılması bu nedenle bazen kullanmak ve hala mantıklı bir çıkış elde etmek zorunda kaldım az yetenekli metin editörü tam olarak aynı basılmasını kullanabileceği anlamına gelir. **

Aslında, yukarıdakinden biraz daha karmaşık bir çözüm kullanıyorum, çünkü tipografik nedenlerden dolayı emo çizgilerimi saç boşluklarıyla çevrelemeyi seviyorum . Bunları Markdown'da bulundurmak daha az okunabilir hale getirir, ancak neyse ki, Vim, imleç farklı bir satırdayken belirli sözdizimi öğelerini gizlemenizi sağlayan "gizleme" işleviyle bunun için bir çözüm sunar: ***

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

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

* Eğer hiç boş bir çizgi kullanmam gerekiyorsa, eşleştirmeyi yazdıktan sonra geri silme düğmesine basabilirim.
** genellikle böyle en-tire kullanmıyorsanız hiç Vim dışına girişim yoksa, ya, sen eşleştirmeleri tetiklemek için başka bir şey kullanabilirsiniz: örneğin --.ve ---. Başka tetikleyiciler kullanıyorsanız, bunu doğrudan .vimrc'inize de yerleştirebilir ve <buffer>seçenekleri kaldırabilirsiniz .
*** Ayrıca, ccharsözdizimi öğelerini tamamen gizlemek yerine, tek bir karakterle değiştirmek için gizlenmiş bir karakter kullanabilirsiniz. Kodlama sorunları hakkında endişeleriniz varsa, Vim'in &ndash;dosyadaki HTML varlıklarını çizgi olarak göstermesini sağlamak için bunu kullanabilirsiniz .


Demek Vim'de çizgi kullanıyorsun? Tek bir sütun genişliğine sahip oldukları için garip görünmüyorlar mı? Em-dash'lerin gerçekte iyi bir yer kaplaması, belki de iki sütunun değerinde olması için herhangi bir püf noktası biliyor musunuz?
Kyle Strand,

@KyleStrand Ne kadar taklit etmek istersin? Bunu dene: set conceallevel=1 | syntax match longdash '—' conceal cchar=-(Bu komuttaki ilk satırın bir em-tire olduğunu ve ikincisinin tam genişlikte kısa çizgi eksi olduğunu unutmayın.)
Zengin

Ekranda bir fark görmüyorum ya da neden ekranın iki sütun almasına neden olacağını görüyorum. Şans eseri sorumu yanlış mı anladınız, yoksa önerinizi yanlış anlıyor muyum?
Kyle Strand,

.... aslında, Vim sözdizimi özellikleri hakkında hiçbir şey bilmiyorum. Does syntax matchkomut hatta bir sözdizimi dosyasının bağlamı dışında çalışıyor?
Kyle Strand,

@KyleStrand Sorunuzu anladım. Bu satırı vimrc'nize kopyalamayı denediniz mi? Yoksa sadece Vim’de mi çalışıyorsun? :)
Zengin

3

Fransızca AZERTY Mac klavyemde Alt+ ile bir tire ekleyebilirim -. Kilometreniz açıkça değişebilir.


2
Alt+-(ya Option+-da sinsi olmak için değil ) Mac'e özgü bir kısayol. OS X'in her yerinde çalışır, ancak vi veya vim ile ilişkili değildir.
ash108

1
MacVim'de çalışır, ancak Terminal vim'de [Esc] gibi davranır -, böylece Normal moda geçer ve imleci önceki satırın başına getirir.
200_success


0

Rich'in büyük cevabından ilham alan vimrcime şu satırları ekledim:

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

Bir muamele gibi çalışıyor!


0

Sonuç olarak, diğer çeşitli cevaplarda önerildiği gibi, bir digraph gitmek için en iyi yoldur. Ancak rastgele unicode karakterler için, ^Vekleme modunda kullanmak için başka bir yoldur (bkz :he i_CTRL-V_digit).

Örneğin bir çizgi için ^Vu2013.


Şimdi bunun OP'nin zaten ne yaptığını anladığını anlıyorum! (Her ne kadar çizgi 2013 olsa da, 2014 değil - bu em çizgi.) Bence bu hala cevapların bir yerinde olması iyi olabilir.
tremby
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.