Редактор VI / VIM: использование последовательности карт для переноса слова в теги HTML - PullRequest
1 голос
/ 03 мая 2009

Я пытаюсь определить последовательность команд vi 'map', которая бы обернула текущее слово в тег HTML, например, метка B (жирный). Карта определяется следующим образом:

:map K ebi<B><esc>ea</B><esc>

Карта начинается с движения «eb», чтобы перейти к началу выбранного слова, при условии, что наиболее вероятной позицией курсора будет начало слова или в середине. Проблема в том, что не работает, если курсор находится на последнем символ слова - тогда будет завернуто следующее слово.

Есть ли хитрость, чтобы заставить эту карту работать надежно для любой позиции курсора со словом?

Ответы [ 4 ]

5 голосов
/ 03 мая 2009

Если это один из карт, это нормально, но если вы хотите делать больше или делать это чаще, вам гораздо лучше использовать текстовые объекты с round.vim

Если вы используете этот скрипт, вы можете сделать (в обычном режиме)

ysiwtb>

Вы должны ввести это буквально. ys означает, чтоround.vim прослушивает текстовое движение. iw выбирает слово, на котором вы сейчас находитесь. t говорит, что вы хотите окружить тегом. b> сообщает, какой тег вы хотите использовать.

Даже если вы не хотите использовать surround.vim, вы можете изучить использование текстовых объектов (:help text-objects) на ваших картах. текстовый объект iw или inner-word - это то, что вам нужно, но я пока не знаю, как обернуть это в карту.

РЕДАКТИРОВАТЬ: я понял, как использовать его на карте, здесь идет ...

:map K viwO<Esc>i<b><Esc>lviw<Esc>a</b><Esc>

Это оставит курсор на закрывающем > закрывающего тега. Он должен работать везде, где в слове изначально находится курсор.

Но, как я уже сказал, лучше использовать Surround.vim.

2 голосов
/ 03 мая 2009

Еще один способ сделать это: удалить внутреннее слово (diw), вставить теги, найти последний <, вставить удаление. </p>

:map K diwi<b></b><Esc>F<P 

closetag.vim: Функции и сопоставления для закрытия открытых тегов HTML / XML может представлять интерес.

1 голос
/ 03 мая 2009

Если вы хотите более глобальное решение, вы можете попробовать XPTemplate , которое может предоставить вам окружение. Просто выделите текст, наберите «хороший фрагмент» (я так думаю) и введите имя своего тега, но вы можете добавить специальный шаблон, если хотите.

Кроме того, это очень хорошие инструменты для использования различных языков, как вы можете видеть в этом видео

0 голосов
/ 03 мая 2009

Вместо этого используйте фунты.

e перемещается в конец текущего или, как вы нашли, следующего слова. b перемещается в начало текущего слова или предыдущего слова, если вы находитесь на первом символе. Для предотвращения перехода к предыдущее слово в случае присутствия на первом символе, переместить один символ справа. Даже если ты на последней букве слова, б приведет вас в нужное положение.

Так что вся ваша строка будет:

:map K lbi<B><esc>ea</B><esc>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...