Какой самый простой способ вставить пробел в Vim?

33

Чтобы вставить тире , я использую ^v u 2014семь нажатий клавиш. Есть ли более простой способ? (Я смотрел на орграфы и не нашел там тире.)

Томас Томечек
источник
4
К вашему сведению, U + 2014 - EM DASH. U + 2013 - это EN DASH. fileformat.info/info/unicode/char/2014/index.htm , fileformat.info/info/unicode/char/2013/index.htm
Куинси Боуэрс
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, нет способа правильно отобразить шрифты с нефиксированной шириной (то есть с неравномерной шириной символов и кернингом), поэтому пробелы и переносы всегда выглядят точно как дефисы, которые простираются до крайнего края границы символа. Вы просто не возражаете против крайнего разрыва между тем, как персонаж отображается в Vim, и тем, как он отображается в другом месте?
Кайл Стрэнд
2
Я с @Carpetsmoker: Compose - - -для тире, Compose - - .для тире. Compose является волшебным, особенно если вы сопоставляете его с совершенно неиспользуемым Caps-Lock.
Rmano

Ответы:

42

Вы можете использовать орграфы: Ctrl+k-N(с большой буквы N)

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

Как указал Куинси, U+2014это эм-тире. Если вы хотите ввести это с помощью орграфов, последовательность будет -M.

tommcdo
источник
Аналогично, EM DASH может быть вставлен с помощью <Ck> -M.
Куинси Бауэрс
U+2014это не en-dash? Вся моя жизнь была ложью! Редактировать: теперь я понял: мой терминальный шрифт (Inconsolata) отображает обе черты одинаково.
Томас Томечек
3
Чтобы получить этот ответ: шестнадцатеричное 2013 - это десятичное число 8211. Используйте :digraphsкоманду для отображения всех
орграфов
10

Если нет предопределенного орграфа или вам нужна более запоминающаяся последовательность клавиш, вы можете определить орграфы в вашем vimrc. Например, ниже будут определены два орграфа для en dash (8211) и em dash (8212), которые отражают их последовательности XCompose.

digraph -. 8211 -- 8212

Команда :digraphожидает, что значение будет указано в десятичном, а не в шестнадцатеричном формате, поэтому это 8211 для пробела, а не 2013 года.

jamessan
источник
Встроен цифровой тираж
1
@ 200_success Я не сказал, что это не так. :) Варианты диграфа Vim не всегда совпадают с более стандартными, поэтому полезно знать, как определить свой собственный диграф, даже если он уже существует.
jamessan
8

Как объяснил tommcdo, стандартный способ вставки черты en в Dim - использование орграфа .

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

Для тире en / em соответственно:

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

NB <buffer>означает, что это сопоставление будет применяться только к файлам Markdown. Это необходимо, потому что есть некоторые контексты (например, программирование), где я не хочу, чтобы два дефиса были заменены тире.

Эти отображения используют тот факт, что в тех случаях, когда я их обычно использую, все тире окружены пробелами, а тире нет . * Использование этих сопоставлений, следовательно, означает, что я могу использовать точно такие же нажатия клавиш в менее способных текстовых редакторах, которые я иногда вынужден использовать, и все же получаю разумный вывод. **

На самом деле я использую немного более сложное решение, чем приведенное выше, потому что по типографским причинам мне нравится окружать мои штрихи волосами . Наличие их в Markdown делает его менее читабельным, но, к счастью, у Vim есть решение для этого с его функцией «скрытия», которая позволяет скрывать определенные элементы синтаксиса, когда курсор находится на другой строке: ***

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

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

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

Богатый
источник
Так вы используете тире в Vim? Разве они не выглядят странно, поскольку им дают только одну ширину столбца? Знаете ли вы какие-либо хитрости, чтобы заставить черточки на самом деле занимать достаточно много места, возможно, в два столбца?
Кайл Стрэнд,
@KyleStrand Как хакер ты хочешь получить? Попробуйте следующее: set conceallevel=1 | syntax match longdash '—' conceal cchar=-(Обратите внимание, что первая черта в этой команде - это тире, а вторая - дефис-минус с полной шириной.)
Rich
Я не вижу разницы в отображении или не вижу, почему это заставило бы дисплей занять два столбца. Вы случайно не поняли мой вопрос или, скорее всего, я неправильно понял ваше предложение?
Кайл Стрэнд,
.... на самом деле, я ничего не знаю о спецификации синтаксиса Vim. Имеет ли syntax matchкоманда работать даже вне контекста файла синтаксиса?
Кайл Стрэнд,
@KyleStrand Я понял твой вопрос. Вы пытались скопировать эту строку в свой vimrc? Или просто запустить его в Vim? :)
Rich
3

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

romainl
источник
2
Alt+-(или, скорее, Option+-чтобы быть педантичным) это ярлык для Mac. Он работает везде в OS X, но не имеет отношения к vi или vim.
ash108 25.02.15
1
Работает в MacVim, но в Terminal vim действует как [Esc], после -чего переключается в обычный режим и помещает курсор в начало предыдущей строки.
200_success
3

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

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

(Обратите внимание на -N в описании, которое показывает орграф для ввода этого символа)

Кристиан Брабандт
источник
0

Вдохновленный великим ответом Рича, я добавил следующие строки в мой vimrc:

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

Работает как удовольствие!

Уилл Райт
источник
0

Для en dash орграф - лучший путь, как предложено в различных других ответах. Но для произвольных символов Юникода другой способ заключается в использовании ^Vв режиме вставки (см. :he i_CTRL-V_digit).

Например, для тире ^Vu2013.

tremby
источник
Теперь я понимаю, что это действительно то, что ОП уже делал! (Несмотря на то, что 2013 год - это не год, а 2014 год - это черт.) Однако я думаю, что все же было бы хорошо иметь где-то кучу ответов.
Тремби