vim - 如何在 Neovim 中插入缩写的主题标签起始行
问题描述
我的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
文件中工作。任何帮助,将不胜感激。
解决方案
缩写的工作方式取决于'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'
用于很多事情。
推荐阅读
- linux-kernel - 为 BBG 构建内核后无法启动(使用 microSD)
- html - 为什么底部属性在嵌套 div 中不起作用?
- python - 箱线图不在一个垂直位置python
- jquery - 从 jquery 中的对象中解压缩数据属性
- ant - “此时文件出乎意料” apache ant
- kendo-ui - 在 Kendo 中为 Angular TreeView 获取节点元数据
- javascript - 在异步函数中执行 createStore 时未定义存储?
- python - Pymysql没有返回任何东西
- google-maps - 从原始位置请求 Google 街景全景图块
- python - 将 OctetString 数据解包到变量中以进行进一步处理