Как быстро закрыть HTML-теги в Vim?
Прошло много времени с тех пор, как я должен был сделать любой HTML-подобный код в Vim
, но недавно я столкнулся с этим снова. Скажем, я пишу несколько простых HTML
:
<html><head><title>This is a title</title></head></html>
Как быстро написать эти закрывающие теги для заголовка, заголовка и HTML? Я чувствую, что упускаю какой-то очень простой способ, который не требует, чтобы я записывал их все по одному.
Конечно, я могу использовать CtrlP для автозаполнения имен отдельных тегов, но на клавиатуре моего ноутбука я получаю правильные скобки и косую черту.
11 ответов
Проверь это..
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-контент в Markdown и используете его. %!
фильтровать ваш буфер Vim через процессор Markdown по вашему выбору:)
Я считаю более удобным сделать так, чтобы vim писал для меня как открывающий, так и закрывающий тег, а не только закрывающий. Вы можете использовать отличный плагин Ragtag от Tim Pope. Использование выглядит следующим образом (пусть | пометить позицию курсора) вы набираете:
пролет |
нажмите CTRL+x ПРОБЕЛ
и вы получите
| SPAN>
Вы также можете использовать CTRL+x ENTER вместо CTRL+x SPACE, и вы получите
| SPAN>
Ragtag может сделать больше, чем просто (например, вставить <% = вещи вокруг этого%> или DOCTYPE). Вы, вероятно, хотите проверить другие плагины автора ragtag, особенно Surround.
Если вы делаете что-то сложное, спаркап очень хорош.
Пример с их сайта:
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>
Существует также плагин zencoding vim: https://github.com/mattn/zencoding-vim
учебное пособие: https://github.com/mattn/zencoding-vim/blob/master/TUTORIAL
Обновление: теперь это называется Emmet: 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>
означает начать новую строку в режиме вставки над курсором и вставить пробел
Проверять, выписываться vim-closetag
Это действительно простой скрипт (также доступен какvundle
плагин), который закрывает (X)HTML-теги для вас. Из этогоREADME
:
Если это текущий контент:
<table|
Теперь вы нажимаете>, содержимое будет:
<table>|</table>
И теперь, если вы нажмете> снова, содержимое будет:
<table> | </table>
Замечания:|
здесь курсор
Вот еще одно простое решение, основанное на легко обнаруживаемом веб-написании:
Автоматическое закрытие тега HTML
:iabbrev </ </<C-X><C-O>
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
allml (теперь Ragtag) и Omni-завершение (
если вы хотите автоматически закрыть тег в этом файле, вы можете отобразить карту следующим образом.
imapF $ a ^ R ">
(^ R - это Contrl+R: вы можете напечатать как этот Control+v, а затем Control + r)
(| это позиция курсора) теперь, если вы наберете..
<Р>ABCDE |
и введите ^ J
затем закройте тег, как это..
<Р>ABCDE р>|
Основываясь на отличном ответе @KeithPinson (извините, репутации недостаточно, чтобы прокомментировать ваш ответ), эта альтернатива не позволит автозаполнению копировать что-либо лишнее, что может быть внутри тега html (например, классы, идентификаторы и т. Д.)..) но не следует копировать в закрывающий тег.
ОБНОВЛЕНИЕ Я обновил свой ответ для работы с filename.html.erb
файлы.
Я заметил, что мой оригинальный ответ не работал в файлах, обычно используемых в представлениях Rails, например some_file.html.erb
когда я использовал встроенный рубин (например, <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]
и встроенный стиль с >>
,