如何将Django模板标签补全从Vim配置迁移到Lua?
把Vim Surround的Django模板配置转换为Neovim Lua代码
核心转换逻辑
Vim中缓冲区局部的b:surround_{char2nr("x")}变量,在Lua里需要通过字符串拼接+vim.b接口来设置:用vim.fn.char2nr()代替原Vim的char2nr()函数,再把结果拼接到surround_字符串后,作为vim.b的键名。
完整Lua配置
下面是对应你原有Vim配置的Lua版本,并且添加了自动命令,确保只在Django模板文件(文件类型通常为htmldjango或djangohtml)中生效:
-- 为Django模板文件配置surround规则 vim.api.nvim_create_autocmd('FileType', { pattern = {'htmldjango', 'djangohtml'}, callback = function() -- 对应原配置: let b:surround_{char2nr("v")} = "{{ \r }}" vim.b['surround_' .. vim.fn.char2nr('v')] = '{{ \r }}' -- 对应原配置: let b:surround_{char2nr("{")} = "{{ \r }}" vim.b['surround_' .. vim.fn.char2nr('{')] = '{{ \r }}' -- 对应原配置: let b:surround_{char2nr("%")} = "{% \r %}" vim.b['surround_' .. vim.fn.char2nr('%')] = '{% \r %}' -- 对应原配置: let b:surround_{char2nr("b")} = "{% block \1block name: \1 %}\r{% endblock \1\1 %}" vim.b['surround_' .. vim.fn.char2nr('b')] = '{% block \1block name: \1 %}\r{% endblock \1\1 %}' -- 对应原配置: let b:surround_{char2nr("i")} = "{% if \1condition: \1 %}\r{% endif %}" vim.b['surround_' .. vim.fn.char2nr('i')] = '{% if \1condition: \1 %}\r{% endif %}' -- 对应原配置: let b:surround_{char2nr("w")} = "{% with \1with: \1 %}\r{% endwith %}" vim.b['surround_' .. vim.fn.char2nr('w')] = '{% with \1with: \1 %}\r{% endwith %}' -- 对应原配置: let b:surround_{char2nr("f")} = "{% for \1for loop: \1 %}\r{% endfor %}" vim.b['surround_' .. vim.fn.char2nr('f')] = '{% for \1for loop: \1 %}\r{% endfor %}' -- 对应原配置: let b:surround_{char2nr("c")} = "{% comment %}\r{% endcomment %}" vim.b['surround_' .. vim.fn.char2nr('c')] = '{% comment %}\r{% endcomment %}' end })
说明
- 自动命令的
pattern参数可以根据你实际的Django模板文件类型调整,如果不确定可以用:set filetype?命令查看当前模板文件的类型。 - 原配置中的
\r和\1在Lua字符串中可以直接保留,因为surround插件的语法逻辑和Vim一致。
内容的提问来源于stack exchange,提问作者Papis Sahine
相关产品推荐
相关产品推荐

