英文:
Migrating Filetype autocmd setting from vimscript to lua
问题
我正在将我的vim脚本设置迁移到lua,但遇到了一个问题。
我有几个这种类型的autocmd设置,但我不知道如何迁移它们:
augroup py_fold_custom
autocmd!
autocmd FileType python setlocal foldmethod=indent
augroup END
augroup html_syntax_disable
autocmd!
autocmd Filetype html if getfsize(expand("%")) > 500000 | setlocal syntax=off | endif
augroup END
有人能帮忙吗?
英文:
I'm migrating my vimscript settings to lua, but hit a snag.
I got several of these type of autocmd settings which I don't have a clue how to migrate them
augroup py_fold_custom
autocmd!
autocmd FileType python setlocal foldmethod=indent
augroup END
augroup html_syntax_disable
autocmd!
autocmd Filetype html if getfsize(expand("%")) > 500000 | setlocal syntax=off | endif
augroup END
Can somebody help?
答案1
得分: 1
使用neovim是个不错的选择。我知道将这类命令转换成Lua可能会让人感到有些不知所措。虽然我已经转换了大部分的配置,但有一个巨大的 vim 脚本命令,我还没能够成功转换。
在neovim中,你有几种选项可以将这些转换成Lua。
首先是使用 autocommands(自动命令):
local generalSettingsGroup = vim.api.nvim_create_augroup('General settings', { clear = true })
vim.api.nvim_create_autocmd('FileType', {
pattern = { '*.py' },
callback = function()
vim.opt.foldmethod = 'indent'
end,
group = generalSettingsGroup,
})
vim.api.nvim_create_autocmd('FileType', {
pattern = { '*.html' },
callback = function()
if vim.api.nvim_buf_line_count(0) > 500000 then
vim.bo.syntax = 'off'
end
end,
group = generalSettingsGroup,
})
但你也可以使用 ftplugin 目录来处理这类事情。你仍然可以使用Lua,在检测到这些文件类型时,neovim将会执行这些代码,只需放在该目录中。
在你的配置目录中创建一个文件 ftplugin/python.lua
,文件内容如下:
vim.opt.foldmethod = 'indent'
对于 HTML 文件,创建 ftplugin/html.lua
文件:
if vim.api.nvim_buf_line_count(0) > 500000 then
vim.bo.syntax = 'off'
end
这是我脑海中首先想到的主要方法。希望这对你有所帮助!
英文:
Good choice switching to neovim. I know how it feels overwhelming to translate these sort of commands. While most of my config has been converted, I have one huge monster vim script command that I've yet to be able to translate.
As with everything in neovim you have several options of how to convert these to lua.
First, using autocommands
local generalSettingsGroup = vim.api.nvim_create_augroup('General settings', { clear = true })
vim.api.nvim_create_autocmd('FileType', {
pattern = { '*.py' },
callback = function()
vim.opt.foldmethod = 'indent'
end,
group = generalSettingsGroup,
})
vim.api.nvim_create_autocmd('FileType', {
pattern = { '*.html' },
callback = function()
if vim.api.nvim_buf_line_count(0) > 500000 then
vim.bo.syntax = 'off'
end
end,
group = generalSettingsGroup,
})
But you could also use the ftplugin directory for things like this.
You can still use lua, and upon detection of these file types this code will be run by neovim just by being in this directory.
In a file in your config directory create ftplugin/python.lua
with this in the file
vim.opt.foldmethod = 'indent'
And for the html one ftplugin/html.lua
if vim.api.nvim_buf_line_count(0) > 500000 then
vim.bo.syntax = 'off'
end
Those are the main ways that come to mind for me. I hope this helps!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论