проблема
Если вы проверите свое сопоставление, вы увидите, что оно не определено должным образом:
:vmap xu
v xu :s/\%V\/\*|**\/\%V//g <CR>
Внутри сопоставления разделитель команд |
завершит команду сопоставления и, следовательно, должен быть экранирован. (Ср. :help map-bar
). Обычно это делается через <Bar>
, но также может быть сделано путем добавления \
. Случайно, ваше регулярное выражение имело именно это, что позволило избежать ошибки определения отображения, но также повредило отображение.
vmap xu :s/\%V\/\*\<Bar>**\/\%V//g <CR>
Вы, вероятно, также должны последовательно избегать второго литерала *
; это привело бы к другой ошибке ( шаблон не найден ) вместо E871:
vmap xu :s/\%V\/\*\<Bar>\**\/\%V//g <CR>
autocmd
... работает, но не так, как обычно. Vim имеет обнаружение типа файла , и из коробки обнаруживает *.css
как filetype=css
для вас. Нет необходимости дублировать эту информацию в ваш autocmd. Вместо этого вы можете подключиться к событию FileType
:
autocmd FileType css vmap xu :s/\%V\/\*\<Bar>\**\/\%V//g <CR>
Альтернатива autocmds
Я бы порекомендовал помещать любые параметры, сопоставления и специфичные для типов файлов autocmds в ~/.vim/ftplugin/{filetype}_whatever.vim
(или {filetype}/whatever.vim
; ср. :help ftplugin-name
) вместо определения лотов :autocmd FileType {filetype}
; он чище и лучше масштабируется; требует, чтобы у вас было :filetype plugin on
, хотя. Настройки, которые переопределяют вещи в плагинах по умолчанию для файловых типов, должны вместо этого идти в ~/.vim/after/ftplugin/{filetype}.vim
.
Более мелкие исправления
- Вы должны использовать
:vnoremap
вместо :vmap
; делает отображение невосприимчивым к переназначению и рекурсии.
- После редактирования файла CSS отображение также будет активным в любом другом буфере, поскольку он является глобальным . Добавьте аргумент
<buffer>
, чтобы ограничить его буфером (CSS).
- Вы можете использовать другой разделитель для
:substitute
; он избегает экранирования /
в шаблоне и делает его немного более читабельным.
Окончательная рекомендация
Я бы добавил в ~/.vim/ftplugin/css_mappings.vim
следующее:
vnoremap <buffer> xu :s#\%V/\*\<Bar>\**/\%V##g <CR>
Или используйте плагин
(Если вы не являетесь минималистом, который избегает плагинов за определенную плату, или если вы сделали это только для обучения.)
Обратите внимание, что есть несколько плагинов для комментариев, которые делают это очень хорошо, и они являются общими (и часто расширяемыми), поэтому они работают для любого типа файла: