【问题标题】:introduce <Tab> in new line while creating a block for python files in vim在 vim 中为 python 文件创建块时在新行中引入 <Tab>
【发布时间】:2017-12-19 21:50:36
【问题描述】:

我想在新行中引入一个 tab 字符,以便在 vim 中为 python 文件创建一个新块。

示例

当我写作时

if(a < 5): 

然后按Enter,光标应该进入下一行,制表符if之后 从上面的行垂直对齐。像这样的

if(a < 5):  
    a = 5 

我已经像这样配置了我的 .vimrc 文件

set nu
set autoindent
set tabstop=4
syntax enable
set showmatch
colorscheme gruvbox 
set bg=dark

"automatically creates a block after :
autocmd FileType python inoremap :<CR> :<CR><Tab>  

注意:
1)最后一行,我写的是我的问题中提到的预期目的。
2) 自动缩进已设置。
3) 我不想使用任何插件。

我面临的问题:

当我在 : 之后按 Enter 时,除了 tab 之外,还会创建一个额外的空格创建错误的缩进。

提前感谢您的帮助

【问题讨论】:

  • 人们通常希望在源代码中避免使用 字符。你为什么想要它?
  • 我只想要完美的缩进。我曾经在 Java 中编写代码,我使用制表符进行缩进。只是旧习惯。
  • python ftplugin 将处理缩进。您不必映射
  • 我其实想自己配置.vimrc。我觉得应该没那么难
  • @Manya 基于当前语法的智能缩进其实没那么简单,这也是为什么Vim在python缩进插件中有127行代码帮你搞定...

标签: python vim vi


【解决方案1】:

你试图做到这一点的方式是艰难的。有一个文件类型插件和一个 Python 语法类型,它已经知道该做什么了。

filetype plugin indent on

并且不要使用set autoindent。它不是很智能,它只是复制上一行的缩进。这与您尝试做的相反。

.py 结尾的文件应该会自动获得正确的设置。如果您需要在缓冲区中强制使用当前语法类型,您可以使用

:set filetype=python

如果你想使用制表符而不是空格,

" Globally
set noexpandtab

" Python only
autocmd FileType python set noexpandtab

但是,我要指出的是,不建议在 Python 中使用选项卡,这与已发布的最佳实践相违背(请参阅 PEP 8)。

最后我会提到“插件”只是一个 Vim 术语。默认情况下,所有这些都随 Vim 提供,这不会创建第三方依赖项。

【讨论】:

  • 其实我不想使用任何插件。想通过配置 .vimrc 文件自己做。我可能应该在问题中写下这个
  • 感谢@Dan Lowe。我得到它并改变了我的配置,它的工作就像一个魅力。多谢。还有一个与上述问题松散相关的问题。我在哪里可以了解有关配置 .vimrc 文件和深入了解 vim 的更多信息。再次感谢。 :)
  • @Manya Drew Neil 在vimcasts.org 上的资料和《Practical Vim》一书很好——你也可以看看vi.stackexchange.com,这是一个专门用于 vi 和 vim 的 stackoverflow 姊妹网站。 Vim 本身中的 :help 也是一个非常全面的文档资源。
  • @Manya 更高级,如果你有兴趣学习 vimscript(编写自己的 vim 模块),github.com/tpope 是一个非常好的 vim 插件的宝库,可以学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2015-02-12
相关资源
最近更新 更多