Как вставить сокращенные строки, начинающиеся с хэштега, в Neovim - PullRequest
1 голос
/ 08 марта 2019

В моей папке ftplugin/cpp.vim есть следующая строка:

inorea <buffer> #def #define

И он продолжает выдавать ошибки, когда я вхожу в Neovim. Весь код выглядит так:

if (&ft != 'cpp')
    finish
endif

inorea <buffer> #inc<lt> #include <lt>><left>
inorea <buffer> #inc #include ""<left>
inorea <buffer> #def #define
nnoremap <buffer> #inc<lt> i#include <lt>><left>
nnoremap <buffer> #inc" i#include ""<left>
nnoremap <buffer> #def<Space> i#define 
inoremap <buffer> /* /**/<left><left>

" For Single-File Codes : Save, Compile, and Run
nnoremap <buffer> <F5> :w<CR>:!g++ % -o %<.exe<CR><CR>:!%<.exe<CR>
nnoremap <buffer> <C-F5> :w<CR>:!g++ % -o %<.exe<CR><CR>:tabe<CR>:terminal<CR>3j$a

Как ни странно, в строке 5 не появляется сообщение об ошибке, и они работают в .cpp файлах. Любая помощь будет оценена.

1 Ответ

1 голос
/ 12 марта 2019

Как работают сокращения, зависит от опции 'iskeyword'. Смотри :h Abbreviations.

В левой части аббревиатуры могут быть только ключевые слова ( full-id ), не являющиеся ключевыми словами символы, заканчивающиеся символом ключевого слова ( end-id ), или любые символы, заканчивающиеся не-ключевыми словами ( non-id ).

Если символ # является , а не частью 'iskeyword', то #def не является ни одним из трех типов и, следовательно, :ab #def ... недопустим. Потому что это ключевые слова, начинающиеся не с ключевого слова.

Формат 'iskeyword' довольно загадочный (см. :h 'isfname'), но по умолчанию он установлен на @,48-57,_,192-255. Не включает #.

Быстрый тест:

:set isk=a-z
:ab #def foo
E474: Invalid argument
:set isk=a-z,#
:ab #def foo

Таким образом, вы можете поставить set iskeyword+=# перед своими сокращениями, но это может привести и к другим проблемам, так как символы из 'iskeyword' используются для многих вещей.

...