Как быстро закрыть HTML-теги в Vim?

Прошло много времени с тех пор, как мне приходилось делать какой-либо HTML-подобный код в Vim, но недавно я снова столкнулся с этим. Скажем, я пишу простой HTML:

<html><head><title>This is a title</title></head></html>

Как мне быстро записать закрывающие теги для заголовка, заголовка и html? Я чувствую, что мне здесь не хватает действительно простого способа, который не предполагает, что я переписываю их все один за другим.

Конечно, я могу использовать CtrlP для автозаполнения отдельных имен тегов, но на клавиатуре моего ноутбука меня привлекают правильные скобки и косая черта.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
120
0
57 600
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Проверь это..

closetag.vim

Functions and mappings to close open HTML/XML tags

https://www.vim.org/scripts/script.php?script_id=13

Я использую нечто подобное.

Я это установил. Он не завершает закрытие тега автоматически. Что такое ярлык? Я пробую Ctrl-_, но это делает мой терминал мелким шрифтом.

alhelal 03.04.2018 04:25

Я считаю использование плагина xmledit довольно полезным. он добавляет две части функциональности:

  1. Когда вы открываете тег (например типа <p>), он расширяет тег, как только вы вводите закрывающий > в <p></p>, и помещает курсор внутри тега в режиме вставки.
  2. Если затем вы сразу же наберете другой > (например вы наберете <p>>), он расширит это на

    <p>

    </p>

и помещает курсор внутри тега с однократным отступом в режиме вставки.

Плагин xml vim добавляет к этим функциям сворачивание кода и сопоставление вложенных тегов.

Конечно, вам вообще не нужно беспокоиться о закрытии тегов, если вы пишете свой HTML-контент в Уценка и используете %! для фильтрации своего буфера Vim через процессор Markdown по вашему выбору :)

Может ли этот плагин автоматически закрывать теги при вводе '</'? Или просто вставить закрывающий тег нажатием клавиши? Иногда вы удаляете закрывающий тег и хотите, чтобы он был вставлен позже ...

bzx 25.06.2011 03:16

Я удалил его, потому что мой gvim мигал при запуске

Tyler Long 14.09.2011 13:29

Мне не нравится этот плагин, потому что он не предоставляет простой способ переместить курсор мимо сгенерированного тега. Например, если вы хотите написать «Приятного <b> дня </b>», вы начнете с ввода «Приятного <b>», что будет выглядеть как «Приятного <b> | </ b > ". Затем вам нужно либо навести стрелку вправо, либо выйти из режима вставки, чтобы продолжить остальную часть предложения. Вот почему решение, в котором вы нажимаете клавишу, чтобы вставить конечный тег, лучше.

exclipy 09.10.2011 10:00

@exclipy В Vim есть множество встроенных способов сделать это. Для начала попробуйте команды «E», «f» и «A».

user456584 15.11.2013 01:10

Я установил плагин xmledit с git clone https://github.com/sukima/xmledit.git ~/.vim/bundle/xmledit. Но работает только при редактировании файлов .xml. Когда файл ext имеет формат .html или .htm, он не работает.

Leo 27.11.2014 08:58

@Chad в настоящее время моим решением было скопировать и вставить файл в тот же каталог, точно переименовать его в «html.vim», чтобы он также влиял на файлы HTML. Теперь у меня есть два одинаковых файла в ~ / .vim / ftplugin (xml.vim и html.vim).

user2719875 11.06.2015 22:55

Мне удобнее заставить 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

neezer 25.06.2011 21:37

Этот, безусловно, самый простой. У Textmate все было хорошо, но Vim справляется с этим, спасибо Krzysiek.

josemota 31.10.2011 16:16

Я люблю минимализм,

imap ,/ </<C-X><C-O>

Что делает <C-X> <C-O>? Для меня это ничего не значит.

exclipy 09.10.2011 10:01

Бывают случаи, когда нужно написать ", /", поэтому я бы предпочел использовать другой ярлык. Еще одна деталь - омни-завершение нужно закрывать, не дожидаясь дополнительного ввода. Итак: imap <silent> <C-c> </<C-X><C-O><C-X>

user699082 12.12.2012 22:18

Очень круто. Также в конец добавлен <Esc>F<i, чтобы вернуть курсор внутрь тега.

mVChr 04.05.2017 22:40

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

thedanotto 07.08.2017 07:09

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

Phemelo Khetho 04.05.2020 07:58

Войдя в систему через 10 лет, чтобы получить это сам, поскольку в какой-то момент он выпал из моего vimrc, он использует omni comption (vim.fandom.com/wiki/Omni_completion), чтобы закрыть текущий тег в файлах режима html, я думаю, что сопоставил его с "./", потому что это было быстро набирать и, как правило, следует открывать новую строку, но сейчас я положу ее где-нибудь в другом месте

sjh 01.06.2020 01:02

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 вместо конца строки ($)

Pietro 07.08.2014 16:45

Если вы делаете что-то сложное, закурить очень хорошо.

Пример с их сайта:

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, но и среди любых других редакторов! Супер!

Chris 06.09.2011 11:12

Это отличный плагин

DenniJensen 10.02.2017 22:09

Этот плагин произошел от дзен-кодирования. Последний теперь известен как Эммет и имеет немного больший набор функций.

chb 16.08.2018 10:46

Также есть плагин 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>
  ---------------------

Ого, это создатель рубина?

tjklemz 12.07.2013 02:29

Картография

Мне нравится, когда мои блочные теги (в отличие от встроенных) закрываются немедленно и с помощью как можно более простого ярлыка (я предпочитаю избегать специальных клавиш, таких как 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 означает «правый», а не «левый», ха-ха ... какая забавная ошибка. Что вы думаете о моем посте? Я заметил, что вы не проголосовали.

Keith Pinson 24.08.2012 00:25

Конечно, приятно. Недавно я начал использовать плагин xml.vim (он действительно неплохо работает). Я бы предложил добавить его в ваш .vimrc с помощью автокоманды, зависящей от типа файла, например: au filetype html inoremap <buffer> ...

wds 24.08.2012 16:31

Наконец, команда Autoclose, которая работает именно так, как должна - просто!

cnp 15.01.2015 04:11

Мне нравится держать курсор между тегами. Поэтому я изменил его в соответствии со своими потребностями. inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>kJxi Я удалил 0<Space> и добавил kJxi. Перейдите на 1 шаг вверх, соедините две строки, удалите один символ и перейдите в режим вставки.

Samundra 19.06.2020 10:31

Вот еще одно простое решение, основанное на легко доступном веб-письме:

  1. Автоматическое закрытие HTML-тега

    :iabbrev </ </<C-X><C-O>

  2. Включение завершения

    autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags

Шикарный ответ !!! без плагина !!! (2-й элемент имеет linkrot) по-прежнему, возможно, лучший ответ из всех, потому что кажется, что быстрее изменить .vimrc, чем обрабатывать плагины. Плюс самый минималистичный ответ

nilon 12.07.2017 18:07

Это добавляет пробел после закрытого тега :(

Vitaly Zdanevich 24.04.2018 12:44

Основываясь на отличном ответе @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>

Примечание: здесь курсор |

Другие вопросы по теме