Jak najłatwiej wstawić en dash w Vimie?

33

Aby wstawić myślnik , używam ^v u 2014siedmiu klawiszy. Czy istnieje prostszy sposób? (Patrzyłem na digrafy i nie znalazłem tam kreski.)

Tomas Tomecek
źródło
4
Do Twojej wiadomości, U + 2014 to EM DASH. U + 2013 to EN DASH. fileformat.info/info/unicode/char/2014/index.htm , fileformat.info/info/unicode/char/2013/index.htm
Quincy Bowers
7
Jeśli używasz X11, powiedziałbym, że XCompose ... Jak to będzie działać na wszystkich twoich aplikacjach, a nie tylko Vimie. Lub jeśli korzystasz z OSX lub Windows, funkcje, które zapewnia ten system operacyjny.
Martin Tournoij,
Być może nie jest to najłatwiejszy sposób, ale zwykle używam, <Ctrl-Shift-U>2013<Space>ponieważ działa wszędzie. Kilka kluczowych kodów przechodzi długą drogę (używam głównie U + 2013, U + 2014, U + 2026, U + 2212, U + 2192, U + B0; - / - /… / - / → / °).
wchargin
Z ciekawości, jak wyświetlasz myślniki? AFAIK, nie ma sposobu, aby poprawnie wyświetlać czcionki o nie stałej szerokości (tj. Z nierównomiernymi szerokościami znaków i kerningiem), więc em- i en-myślniki zawsze wyglądają dokładnie jak łączniki, które rozciągają się do skrajnej krawędzi granicy znaku. Czy nie masz nic przeciwko ekstremalnej rozbieżności między tym, jak postać jest wyświetlana w Vimie i jak jest renderowana gdzie indziej?
Kyle Strand,
2
Jestem z @Carpetsmoker: Compose - - -dla em-dash, Compose - - .dla en-dash. Komponowanie jest magiczne, zwłaszcza jeśli zamapujesz go na całkowicie nieużywaną Caps-Lock.
Rmano

Odpowiedzi:

42

Możesz używać digrafów: Ctrl+k-N(z dużą N)

W trybie Wstawianie są wprowadzane cyfry, Ctrl+kpo których następuje sekwencja dwóch znaków. Dla en-dash sekwencja jest następująca -N.

Jak zauważył Quincy, U+2014to em-dash. Jeśli chcesz wprowadzić to za pomocą digraphs, sekwencja jest -M.

tommcdo
źródło
Podobnie EM DASH można wstawić za pomocą <Ck> -M.
Quincy Bowers
U+2014nie jest en-dash? całe moje życie było kłamstwem! Edycja: teraz rozumiem: moja czcionka terminalowa (Inconsolata) renderuje oba myślniki w ten sam sposób.
Tomas Tomecek
3
Aby dojść do tej odpowiedzi: hex 2013 ma wartość dziesiętną 8211. Użyj :digraphspolecenia, aby wyświetlić wszystkie digrafy i poszukaj 8211.
200_success
10

Jeśli nie ma predefiniowanego digrafu lub chcesz bardziej zapadającą w pamięć sekwencję klawiszy, możesz zdefiniować digrafy w swoim vimrc. Na przykład poniżej zdefiniują dwa digrafy dla en dash (8211) i em dash (8212), które odzwierciedlają ich sekwencje XCompose.

digraph -. 8211 -- 8212

:digraphKomenda spodziewa wartość należy określić w systemie dziesiętnym, a nie hex, dlatego to 8211 dla Półpauza niż 2013.

jamessan
źródło
Digraph
1
@ 200_success Nie powiedziałem, że nie było. :) Opcje digrafów Vima nie zawsze są zgodne z bardziej standardowymi, więc wiedza jak zdefiniować własny digraf jest przydatna, nawet jeśli już istnieje.
jamessan
8

Standardowym sposobem wstawiania kreski w Vim jest użycie digrafa , jak wyjaśnił tommcdo .

Jednak uważam, digrafy w ogóle, a szczególnie ten jeden ( Ctrl+k, -, Shift+N) dość niewygodne do pisania. Aby przyspieszyć wprowadzanie myślników, możesz dodać następującą parę mapowań w trybie wstawiania do pliku typu pliku, na przykład.vim/after/ftplugin/markdown.vim .

Odpowiednio dla myślników en / em:

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

Uwaga: <buffer>Oznacza to, że mapowanie będzie miało zastosowanie tylko do plików Markdown. Jest to konieczne, ponieważ istnieją pewne konteksty (np. Programowanie), w których nie chcę, aby dwa myślniki były zastępowane myślnikami.

Te mapowania wykorzystują fakt, że w kontekstach zwykle ich używam, myślniki są otoczone spacjami, a myślniki nie . * Używanie tych mapowań oznacza zatem, że mogę używać dokładnie tych samych naciśnięć klawiszy w mniej wydajnych edytorach tekstu, których czasami jestem zmuszony używać i nadal otrzymuję rozsądne wyniki. **

Właściwie używam nieco bardziej skomplikowanego rozwiązania niż powyższe, ponieważ z powodów typograficznych lubię otaczać moje kreski przedziałami włosów . Umieszczenie ich w Markdown sprawia, że ​​jest mniej czytelny, ale na szczęście Vim ma na to rozwiązanie, dzięki funkcji „ukrywania”, która pozwala ukryć pewne elementy składniowe, gdy kursor znajduje się w innej linii: ***

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

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

* Jeśli kiedykolwiek będę musiał użyć nieskreślonej kreski en, mogę po prostu nacisnąć backspace po wpisaniu mapowania.
** Jeśli nie zazwyczaj używają en-kreski tak, lub jeśli nie zawsze wychodzić z vim, można użyć coś innego, aby wywołać mapowania: Np --.i ---. Jeśli używasz innych wyzwalaczy, możesz również umieścić to bezpośrednio w .vimrc i usunąć <buffer>opcje.
*** Możesz również użyć znaku ukrywania, ccharaby zastąpić elementy składniowe jednym znakiem, zamiast całkowicie je ukrywać. Jeśli martwisz się problemami z kodowaniem, możesz użyć tego, aby Vim wyświetlał &ndash;encje HTML w pliku jako myślniki.

Bogaty
źródło
Więc używasz myślników w Vimie? Czy nie wyglądają na dziwne, ponieważ mają tylko jedną szerokość kolumny? Czy znasz jakieś sztuczki, dzięki którym em-kreski rzeczywiście zajmują dużo miejsca, być może warte dwie kolumny?
Kyle Strand
@KyleStrand Jak hacky chcesz się dostać? Spróbuj tego: set conceallevel=1 | syntax match longdash '—' conceal cchar=-(Zauważ, że pierwszy myślnik w tym poleceniu to myślnik, a drugi to myślnik o pełnej szerokości minus).
Rich
Nie widzę różnicy na wyświetlaczu ani nie widzę powodu, dla którego wyświetlacz zajmowałby dwie kolumny. Czy przez przypadek źle zrozumiałeś moje pytanie, czy może źle zrozumiałem twoją sugestię?
Kyle Strand
.... właściwie nie wiem nic o specyfikacji składni Vima. Czy syntax matchpolecenie działa nawet poza kontekstem pliku składniowego?
Kyle Strand
@KyleStrand Rozumiem twoje pytanie. Czy próbowałeś skopiować tę linię do swojego vimrc? A może po prostu uruchamiasz go w Vimie? :)
Bogaty
3

Na mojej francuskiej klawiaturze Mac AZERTY mogę wstawić myślnik za pomocą Alt+ -. Twój przebieg może się oczywiście różnić.

romainl
źródło
2
Alt+-(a raczej Option+-być pedantyczny) to skrót dla komputerów Mac. Działa wszędzie w OS X, ale nie jest związany z vi ani vim.
ash108
1
Działa w MacVimie, ale w Terminal vim działa jak [Esc], po którym -następuje przejście do trybu normalnego i umieszczenie kursora na początku poprzedniej linii.
200_success
3

Zainstaluj moją wtyczkę Unicode , wpisz Vim i wpisz DASH, a następnie CtrlXCtrlZaktywuj uzupełnianie Unicode.

wprowadź opis zdjęcia tutaj

(Zwróć uwagę na -N w opisie, który pokazuje cyfrę, aby wprowadzić ten znak)

Christian Brabandt
źródło
0

Zainspirowany świetną odpowiedzią Richa dodałem następujące wiersze do mojego vimrc:

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

Działa jak uczta!

Will Wright
źródło
0

W skrócie digraph jest najlepszą drogą, jak sugerują różne inne odpowiedzi. Ale w przypadku dowolnych znaków Unicode innym sposobem jest użycie^V w trybie wstawiania (patrz :he i_CTRL-V_digit).

Na przykład w myśleniu ^Vu2013.

drżenie
źródło
Teraz zdaję sobie sprawę, że to właśnie robił OP! (Choć en dash to 2013, a nie 2014 - to em dash.) Myślę, że nadal dobrze jest mieć gdzieś na stosie odpowiedzi.
tremby