Прошло много времени с тех пор, как мне приходилось делать какой-либо HTML-подобный код в Vim, но недавно я снова столкнулся с этим. Скажем, я пишу простой HTML:
<html><head><title>This is a title</title></head></html>
Как мне быстро записать закрывающие теги для заголовка, заголовка и html? Я чувствую, что мне здесь не хватает действительно простого способа, который не предполагает, что я переписываю их все один за другим.
Конечно, я могу использовать CtrlP для автозаполнения отдельных имен тегов, но на клавиатуре моего ноутбука меня привлекают правильные скобки и косая черта.






Проверь это..
closetag.vim
Functions and mappings to close open HTML/XML tags
https://www.vim.org/scripts/script.php?script_id=13
Я использую нечто подобное.
Я считаю использование плагина xmledit довольно полезным. он добавляет две части функциональности:
<p>), он расширяет тег, как только вы вводите закрывающий > в <p></p>, и помещает курсор внутри тега в режиме вставки.Если затем вы сразу же наберете другой > (например вы наберете <p>>), он расширит это на
<p>
</p>
и помещает курсор внутри тега с однократным отступом в режиме вставки.
Плагин xml vim добавляет к этим функциям сворачивание кода и сопоставление вложенных тегов.
Конечно, вам вообще не нужно беспокоиться о закрытии тегов, если вы пишете свой HTML-контент в Уценка и используете %! для фильтрации своего буфера Vim через процессор Markdown по вашему выбору :)
Может ли этот плагин автоматически закрывать теги при вводе '</'? Или просто вставить закрывающий тег нажатием клавиши? Иногда вы удаляете закрывающий тег и хотите, чтобы он был вставлен позже ...
Я удалил его, потому что мой gvim мигал при запуске
Мне не нравится этот плагин, потому что он не предоставляет простой способ переместить курсор мимо сгенерированного тега. Например, если вы хотите написать «Приятного <b> дня </b>», вы начнете с ввода «Приятного <b>», что будет выглядеть как «Приятного <b> | </ b > ". Затем вам нужно либо навести стрелку вправо, либо выйти из режима вставки, чтобы продолжить остальную часть предложения. Вот почему решение, в котором вы нажимаете клавишу, чтобы вставить конечный тег, лучше.
@exclipy В Vim есть множество встроенных способов сделать это. Для начала попробуйте команды «E», «f» и «A».
Я установил плагин xmledit с git clone https://github.com/sukima/xmledit.git ~/.vim/bundle/xmledit. Но работает только при редактировании файлов .xml. Когда файл ext имеет формат .html или .htm, он не работает.
@Chad в настоящее время моим решением было скопировать и вставить файл в тот же каталог, точно переименовать его в «html.vim», чтобы он также влиял на файлы HTML. Теперь у меня есть два одинаковых файла в ~ / .vim / ftplugin (xml.vim и html.vim).
Мне удобнее заставить vim писать за меня открывающий и закрывающий теги, а не только закрывающий. Вы можете использовать отличный плагин ragtag Тима Поупа. Использование выглядит так (пусть | отметит позицию курсора) вы набираете:
span|
нажмите CTRL + xSPACE
и ты получаешь
<span>|</span>
Вы также можете использовать CTRL + xENTER вместо CTRL + xSPACE, и вы получите
<span> | </span>
Ragtag может делать больше, чем просто (например, вставлять <% = stuff вокруг этого%> или DOCTYPE). Вы, вероятно, захотите проверить другие плагины от автор тряпки, особенно окружать.
+1 Отлично! Кстати, теперь он известен как ragtag: vim.org/scripts/script.php?script_id=1896
Этот, безусловно, самый простой. У Textmate все было хорошо, но Vim справляется с этим, спасибо Krzysiek.
Я люблю минимализм,
imap ,/ </<C-X><C-O>
Что делает <C-X> <C-O>? Для меня это ничего не значит.
Бывают случаи, когда нужно написать ", /", поэтому я бы предпочел использовать другой ярлык. Еще одна деталь - омни-завершение нужно закрывать, не дожидаясь дополнительного ввода. Итак: imap <silent> <C-c> </<C-X><C-O><C-X>
Очень круто. Также в конец добавлен <Esc>F<i, чтобы вернуть курсор внутрь тега.
чтобы использовать эту команду в режиме вставки, нажмите ,/, чтобы закрыть тег
Вышеупомянутое решение имеет много положительных отзывов, но ему не хватает объяснений, особенно для новичка, такого как я. Как это работает и как им пользоваться?
Войдя в систему через 10 лет, чтобы получить это сам, поскольку в какой-то момент он выпал из моего vimrc, он использует omni comption (vim.fandom.com/wiki/Omni_completion), чтобы закрыть текущий тег в файлах режима html, я думаю, что сопоставил его с "./", потому что это было быстро набирать и, как правило, следует открывать новую строку, но сейчас я положу ее где-нибудь в другом месте
allml (теперь Ragtag) и всенаправленное завершение (<C-X> <C-O>) не работает в файлах типа .py или .java.
если вы хотите автоматически закрыть тег в этом файле, вы можете составить карту вот так.
imap <C-j> <ESC>F<lyt>$a</^R">
(^ R - это Contrl + R: вы можете ввести, например, Control + v, а затем Control + r)
(| - позиция курсора) теперь, если вы напечатаете ..
<p> abcde |
и введите ^ j
затем закройте тег вот так ..
<p> abcde </p> |
с imap <C-j> <ESC> mfF <lyt> `fa </ <C-R>"> тег клонирования находится там, где был курсор, когда вы вводили ^ j вместо конца строки ($)
Если вы делаете что-то сложное, закурить очень хорошо.
Пример с их сайта:
ul > li.item-$*3 расширяется до:
<ul>
<li class = "item-1"></li>
<li class = "item-2"></li>
<li class = "item-3"></li>
</ul>
с <C-e>.
Чтобы выполнить пример, указанный в вопросе,
html > head > title{This is a title}
дает
<html>
<head>
<title>This is a title</title>
</head>
</html>
Огромное спасибо! Это круче, чем все, что я видел раньше, не только Vim, но и среди любых других редакторов! Супер!
Это отличный плагин
Этот плагин произошел от дзен-кодирования. Последний теперь известен как Эммет и имеет немного больший набор функций.
Также есть плагин zencoding vim: https://github.com/mattn/zencoding-vim
учебник: https://github.com/mattn/zencoding-vim/blob/master/TUTORIAL
Обновлять: теперь называется Эммет: http://emmet.io/
Отрывок из учебника:
1. Expand Abbreviation
Type abbreviation as 'div>p#foo$*3>a' and type '<c-y>,'.
---------------------
<div>
<p id = "foo1">
<a href = ""></a>
</p>
<p id = "foo2">
<a href = ""></a>
</p>
<p id = "foo3">
<a href = ""></a>
</p>
</div>
---------------------
2. Wrap with Abbreviation
Write as below.
---------------------
test1
test2
test3
---------------------
Then do visual select(line wize) and type '<c-y>,'.
If you request 'Tag:', then type 'ul>li*'.
---------------------
<ul>
<li>test1</li>
<li>test2</li>
<li>test3</li>
</ul>
---------------------
...
12. Make anchor from URL
Move cursor to URL
---------------------
http://www.google.com/
---------------------
Type '<c-y>a'
---------------------
<a href = "http://www.google.com/">Google</a>
---------------------
Ого, это создатель рубина?
Мне нравится, когда мои блочные теги (в отличие от встроенных) закрываются немедленно и с помощью как можно более простого ярлыка (я предпочитаю избегать специальных клавиш, таких как CTRL, где это возможно, хотя я использую closetag.vim для закрытия своих встроенных тегов). Мне нравится используйте этот ярлык при запуске блоков тегов (спасибо @kimilhee; это взлет его ответа):
inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>O<Space>
Тип-
<p>[Tab]
Результат-
<p>
|
</p>
где | указывает положение курсора.
inoremapсредства создает отображение в режиме вставки><Tab>средства закрывающие угловые скобки и символ табуляции; это то, что совпадает><Esc>средства завершает первый тег и выходит из режима вставки в нормальный режимF<средства найти последнюю угловую скобу открытияlсредства переместите курсор вправо (не копируйте открывающую угловую скобку)yt>средства перемещает курсор с позиции курсора вверх до следующей закрывающей угловой скобки (т. Е. Копирует содержимое тегов)o</средства начать новую строку в режиме вставки и добавить открывающую угловую скобку и косую черту<C-r>"средства вставить в режиме вставки из регистра по умолчанию (")><Esc>средства закрыть закрывающий тег и выйти из режима вставкиO<Space>средства начать новую строку в режиме вставки над курсором и вставить пробел@wds Вау, да, я никогда не думал о том, что l означает «правый», а не «левый», ха-ха ... какая забавная ошибка. Что вы думаете о моем посте? Я заметил, что вы не проголосовали.
Конечно, приятно. Недавно я начал использовать плагин xml.vim (он действительно неплохо работает). Я бы предложил добавить его в ваш .vimrc с помощью автокоманды, зависящей от типа файла, например: au filetype html inoremap <buffer> ...
Наконец, команда Autoclose, которая работает именно так, как должна - просто!
Мне нравится держать курсор между тегами. Поэтому я изменил его в соответствии со своими потребностями. inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>kJxi Я удалил 0<Space> и добавил kJxi. Перейдите на 1 шаг вверх, соедините две строки, удалите один символ и перейдите в режим вставки.
Вот еще одно простое решение, основанное на легко доступном веб-письме:
Автоматическое закрытие HTML-тега
:iabbrev </ </<C-X><C-O>
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
Шикарный ответ !!! без плагина !!! (2-й элемент имеет linkrot) по-прежнему, возможно, лучший ответ из всех, потому что кажется, что быстрее изменить .vimrc, чем обрабатывать плагины. Плюс самый минималистичный ответ
Это добавляет пробел после закрытого тега :(
Основываясь на отличном ответе @KeithPinson (извините, недостаточно очков репутации, чтобы прокомментировать ваш ответ), эта альтернатива предотвратит копирование при автозаполнении чего-либо дополнительного, что может быть внутри тега html (например, классов, идентификаторов и т. д.), но не следует копировать в закрывающий тег.
ОБНОВИТЬ Я обновил свой ответ для работы с файлами filename.html.erb.
Я заметил, что мой исходный ответ не работал в файлах, обычно используемых в представлениях Rails, таких как some_file.html.erb, когда я использовал встроенный ruby (например, <p>Year: <%= @year %><p>). Код ниже воля работает с файлами .html.erb.
inoremap ><Tab> ><Esc>?<[a-z]<CR>lyiwo</<C-r>"><Esc>O
Пример использования
Тип:
<div class = "foo">[Tab]
Результат:
<div class = "foo">
|
<div>
где | указывает положение курсора
И как пример добавления закрывающего тега в строку вместо стиля блока:
inoremap ><Tab> ><Esc>?<[a-z]<CR>lyiwh/[^%]><CR>la</<C-r>"><Esc>F<i
Пример использования
Тип:
<div class = "foo">[Tab]
Результат:
<div class = "foo">|<div>
где | указывает положение курсора
Верно, что оба приведенных выше примера полагаются на >[Tab], чтобы сигнализировать о закрывающем теге (это означает, что вам придется выбрать встроенный или блочный стиль либо). Лично я использую блочный стиль с >[Tab] и встроенный стиль с >>.
vim-closetagЭто действительно простой скрипт (также доступный как плагин vundle), закрывающий (X) HTML-теги за вас. Из этого README:
If this is the current content:
<table|Now you press >, the content will be:
<table>|</table>And now if you press > again, the content will be:
<table> | </table>
Примечание: здесь курсор |
Я это установил. Он не завершает закрытие тега автоматически. Что такое ярлык? Я пробую
Ctrl-_, но это делает мой терминал мелким шрифтом.