gpt4 book ai didi

python - 通过映射到 autocmd 自动完成 python Shebang(在非 .py 文件中)

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:39 24 4
gpt4 key购买 nike

我正在学习 Vim,我已经成功地设置了我的 .vimrc 文件,这样每当我创建一个新的 python .py 文件时,就会自动生成适当的 shebang 和 header 。对我好!

但是,在构建终端管道时,我并不总是喜欢为我通过管道传输的程序包含 .py 扩展名。因此,shebang 不会自动生成。伤心!

无需重复我为 autocmd 编写的内容(这需要多次尝试和错误才能编写,因为这是我学习的方式),我可以在 INSERT 模式下映射像“pyhead”这样的字符串,或者创建一个绑定(bind)到 autocmd 的宏在我选择不使用 .py 扩展名时轻松实现我的 shebangbang?我觉得好像一个简单的映射到一个已经存在的命令应该防止困惑的 .vimrc。我已将我的 autocmd 放在一个 augroup 中,如下所示:

    augroup Shebang
autocmd BufNewFile *.py 0put =\"#!/usr/bin/env python\<nl>...
...# -*-coding: utf-8 -*-\
...<nl>\<nl>\"
...|put ='#'.expand('%:t')
...|put =\"#<My_NAME>\"
...|put ='#LAST UPDATED: '.strftime('%m-%d-%Y')\|$
augroup end

为清楚起见,autocmd 都在一行中,但我包含了三个点来表示继续(这样您就不需要滚动)。如果这是一个愚蠢的请求,并且有一个简单的答案,请谴责。谢谢!

最佳答案

您可以将长:put 命令提取到函数 中,然后从:autocmd< 中:call/.

function! InsertPythonShebang()
0put =...
endfunction

autocmd BufNewFile *.py call InsertPythonShebang()

然后您可以在映射中重用该函数:

nnoremap <Leader>py :call InsertPythonShebang()<CR>

或自定义命令:

command! -bar PyBang call InsertPythonShebang()

你对插入特殊关键字使用react的建议也是可能的,但我不会提供解决方案,因为我认为它不合惯用,而且实现会更加复杂(特别是如果你想重用:put,而不仅仅是生成的文本)。另请注意,有几个代码片段插件提供类似的功能(但再次为您的 :autocmd 重复使用相同的字符串将是一个挑战)。

我建议在空缓冲区上设置 python 文件类型时触发。无论如何,为了有语法高亮,你需要:setf python。 (内置文件类型检测需要 .py 文件扩展名或现有的 shebang 行才能工作。第 22 条军规。)

autocmd FileType python if line('$') == 1 && empty(getline(1)) | call InsertPythonShebang() | endif

关于python - 通过映射到 autocmd 自动完成 python Shebang(在非 .py 文件中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48821060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com