Как сделать замену vim - PullRequest
0 голосов
/ 30 июня 2010

Я создал следующее правило:

iabbrev script

Но во время запуска vim говорит:

Ошибка при обработке .vimrc:
строка 290:
E474: Неверный аргумент

Указывая на эту строку. И я не могу обойти это, кажется, проблема в левой части, так же, как «сценарий» является зарезервированным словом. Есть ли способ избежать этого? Или я здесь что-то не так делаю?

Ответы [ 4 ]

3 голосов
/ 30 июня 2010

рассмотрите возможность использования чего-то вроде SnipMate: http://www.vim.org/scripts/script.php?script_id=2540

Тогда у вас уже есть много макросов, например,

snippet script
   <script type="text/javascript" charset="utf-8">
       ${1}
   </script>${2}

в html.snippet

, чтобы использовать его, введите в режиме вставки следующее: script<TAB> - вставленный фрагмент будет вставлен (без элементов ${n}) и курсор будет там, где был ${1}. Введите свой код, затем снова нажмите <TAB> (все еще в режиме вставки), и курсор будет после </script>.

Существует множество других фрагментов кода, поставляемых с Snipmate для многих языков. И действительно легко создавать свои собственные фрагменты.

2 голосов
/ 30 июня 2010

После нескольких попыток и прочтения документации я не думаю, что это сопоставление возможно. Ссылаясь на :help abbreviations:

Существует три типа сокращений:

full-id Тип «full-id» целиком состоит из ключевых слов (букв и символы из опции 'iskeyword'). Это самый распространенный сокращение.

Examples: "foo", "g3", "-1"

end-id Тип "end-id" оканчивается символом ключевого слова, но все остальные символы не являются ключевыми словами.

Examples: "#i", "..f", "$/7"

non-id Тип «non-id» оканчивается символом без ключевого слова, другой символы могут быть любого типа, кроме пробела и табуляции. {этот тип Vi не поддерживается}}

Examples: "def#", "4/7$"

Примеры строк, которые не могут быть сокращениями: "a.b", "#def", "a b", "_ $ r"

Таким образом, такое сокращение, как <script, кажется невозможным. Конечно, вы можете определить аббревиатуру для script следующим образом:

:inoreabbrev script <script type="text/javascript"></script>

Таким образом, открывающая скобка не является частью аббревиатуры и поэтому не требуется в расширении . Единственная проблема заключается в том, что вы должны быть осторожны, когда хотите написать текст script. В этом случае вы должны выйти из режима вставки в середине слова или набрать script<C-V><space>.

Еще одна полезная уловка для размещения курсора между тегами - это отображение, подобное этому, которое переходит назад к предыдущей открывающей скобке:

:inoreabbrev script <script type="text/javascript"></script><C-O>F<

Или разместить теги на разных строках с курсором между ними:

:inoreabbrev script <script type="text/javascript"><CR></script><C-O>O
0 голосов
/ 05 ноября 2013

В gVim работает только два символа (не знаю почему):

:iab <s <script>

, набрав <s, затем space получает "<script>"

0 голосов
/ 30 июня 2010

Благодаря @ Jörn Horstmann и @James Vega (из списка рассылки vim-dev) проблема может быть решена: просто добавьте < к опции 'iskeyword', например, используя

set iskeyword+=60 " 60==char2nr("<")

Обратите внимание, что опция 'iskeyword' используется во многих движениях, поэтому это может вызвать некоторые негативные побочные эффекты.

...