Який найпростіший спосіб вставити штрих у Vim?


33

Щоб вставити штрих , я використовую ^v u 2014сім натискань клавіш. Чи є простіший спосіб? (Я дивився на фотографії і не знайшов там тире.)



7
Якщо ви використовуєте X11, я б сказав XCompose ... Оскільки це буде працювати на всіх ваших програмах, а не тільки на Vim. Або якщо ви перебуваєте в OSX або Windows, засоби, які надає ОС.
Мартін Турноїй

Мабуть, не найпростіший спосіб, але я схильний використовувати, <Ctrl-Shift-U>2013<Space>бо він працює скрізь. Кілька ключових кодів проходять довгий шлях (я в основному використовую U + 2013, U + 2014, U + 2026, U + 2212, U + 2192, U + B0; - / - /… / - / → / °).
wchargin

Як з цікавості ви показуєте тире? AFAIK, немає можливості правильно відображати шрифти з фіксованою шириною (тобто з нерівномірними ширинами символів та кернінгами), тому em- та en-тире завжди виглядають точно як дефіси, які простягаються до крайнього краю меж символів. Ви просто не заперечуєте, щоб мати надзвичайний розрив між тим, як персонаж відображається у Vim, і тим, як він відображається в іншому місці?
Кайл Странд

2
Я з @Carpetsmoker: Compose - - -для ем-тире, Compose - - .для ен-тире. Композиція є магічною, особливо якщо ви покладете її на інакше повністю невикористаний Caps-Lock.
Рмано

Відповіді:


42

Ви можете використовувати графіки: Ctrl+k-N(з великим літером N)

У режимі "Вставка" вводяться графіки, за якими Ctrl+kслідує двозначна послідовність. Для en-dash послідовність є -N.

Як вказував Квінсі, U+2014це ем-тире. Якщо ви хочете ввести це, використовуючи digraphs, послідовність є -M.


Так само EM DASH можна вставити з <Ck> -M.
Квінсі Боуерс

U+2014не ен-тире? все моє життя було брехнею! Редагувати: тепер я розумію: мій шрифт термінала (Inconsolata) відображає обидві тире однаково.
Томаш Томечек

3
Щоб прийти до цієї відповіді: hex 2013 - це десятковий номер 8211. Використовуйте :digraphsкоманду, щоб відобразити всі графіки, і шукайте 8211.
200_success

10

Якщо немає заздалегідь визначеного диграфа або ви хочете запам'ятовувати послідовність ключів, то ви можете визначити його у vimrc. Наприклад, нижче буде визначено два діаграми для en dash (8211) та em dash (8212), які відображають їх послідовності XCompose.

digraph -. 8211 -- 8212

:digraphКоманда очікує , що значення , яке буде вказано в десяткової системі, а не гекс, тому це 8211 за тире , а не 2013.


Вбудований диграф-тире.
200_спілок

1
@ 200_success Я не сказав, що це не так. :) Вибір виграми Vgraph не завжди узгоджується з більш стандартними, тому знати, як визначити свій власний диграф, є корисним, навіть якщо такий вже існує.
Jamessan

8

Стандартний спосіб вставити штрих у Vim - використовувати диграф, як пояснив tommcdo .

Тим НЕ менше, я вважаю диграфів в цілому, і в Зокрема , це один ( Ctrl+k, -, Shift+N) досить незручно набирати. Для швидшого введення тире ви можете додати наступну пару відображень у режимі вставки до файлу типу файлів, наприклад .vim/after/ftplugin/markdown.vim.

Для en / em тире відповідно:

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

Примітка. <buffer>Засоби цього відображення застосовуються лише до файлів Markdown. Це необхідно, оскільки є деякі контексти (наприклад, програмування), де я не хочу, щоб дві дефіси були замінені тире.

Ці відображення скористаються тим, що в контекстах, якими я їх зазвичай використовую, en тире оточений пробілами, а em тире - ні . * Таким чином, використання цих відображень означає, що я можу використовувати точно такі ж натискання клавіш у менш спроможних текстових редакторах, які я іноді змушений використовувати і все-таки отримую розумний вихід. **

Насправді я використовую дещо складніше рішення, ніж зазначене вище, тому що з типографічних причин я люблю оточувати свої ем-штрихи просторами для волосся . Наявність їх у Markdown робить його менш читабельним, але, на щастя, Vim має для цього рішення, з його функцією "приховування", яка дозволяє приховати певні елементи синтаксису, коли курсор знаходиться в іншому рядку: ***

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

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

* Якщо мені коли-небудь потрібно буде використовувати без тиску нерозбірник, я можу просто натиснути зворотну область після введення карти.
** Якщо ви зазвичай не використовуєте подібні тире, або якщо ви ніколи не виходили з Vim, ви можете використовувати щось інше, щоб запустити відображення: наприклад, --.і ---. Якщо ви використовуєте інші тригери, ви також можете розмістити це безпосередньо у своєму .vimrc та видалити <buffer>параметри.
*** Ви також можете використовувати прихований символ, ccharщоб замінити елементи синтаксису одним символом, а не приховувати їх повністю. Якщо вас турбують проблеми з кодуванням, ви можете використовувати це, щоб Vim відображав &ndash;HTML-файли у файлі як тире.


Отже, ви використовуєте тире у Vim? Вони не виглядають дивним чином, оскільки їм надається лише одна ширина стовпця? Чи знаєте ви які-небудь хитрощі, щоб зробити ем-тире насправді займає хороший простір, можливо, варто дві колонки?
Кайл Странд

@KyleStrand Як хакі ви хочете отримати? Спробуйте це: set conceallevel=1 | syntax match longdash '—' conceal cchar=-(Зауважте, що перший тире в цій команді - це ем-тире, а другий - дефіс на повну ширину-мінус.)
Різноманітний

Я не бачу різниці на дисплеї або не знаю, чому це призвело б до відображення двох стовпців. Ви випадково неправильно зрозуміли моє запитання, чи, ймовірно, я нерозумію вашу пропозицію?
Кайл Странд

.... насправді я нічого не знаю про специфікацію синтаксису Vim. Чи працює syntax matchкоманда навіть поза контекстом файлу синтаксису?
Кайл Странд

@KyleStrand Я зрозумів ваше запитання. Ви спробували скопіювати цей рядок у свій vimrc? Або просто запустити його у Vim? :)
Багатий

3

На моїй французькій клавіатурі AZERTY Mac я можу вставити крапку з Alt+ -. Пробіг очевидно може змінюватися.


2
Alt+-(а точніше Option+-бути педантичним) - це ярлик, характерний для Mac. Він працює скрізь в OS X, але не пов'язаний з vi або vim.
ash108

1
Працює в MacVim, але в Terminal vim він діє як [Esc], за яким -переходить, таким чином переходить у звичайний режим і ставить курсор на початок попереднього рядка.
200_успіх

3

Встановіть мій плагін Unicode , введіть Vim та введіть DASH, після чого CtrlXCtrlZактивуйте завершення Unicode.

введіть тут опис зображення

(Зверніть увагу на -N в описі, в якому показано, що для введення цього символу є диграф)


0

Натхненний чудовою відповіддю Річа, я додав наступні рядки до свого vimrc:

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

Працює як частування!


0

Для кращого переліку найкращий спосіб пройти, як це пропонується в різних інших відповідях. Але для довільних символів унікоду іншим способом є використання ^Vу режимі вставки (див. :he i_CTRL-V_digit).

За тире, яке було б, наприклад ^Vu2013.


Зараз я усвідомлюю, що це насправді те, що вже робила ОП! (Хоча дефіс - це 2013, а не 2014 - це ем тире.) Я думаю, що це все-таки може бути добре мати десь у купі відповідей.
тремтіння
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.