gpt4 book ai didi

ubuntu - 打开 *second* 文件时 Vim 不遵循配置

转载 作者:行者123 更新时间:2023-12-04 19:01:12 24 4
gpt4 key购买 nike

从本质上讲,我的配置似乎适用于我打开的第一个文件,但是当我打开后续文件时,它并没有按预期工作。我特别遇到了 Python 文件的问题,但我猜考虑到问题的性质,它可能存在于其他文件中。

我的 .vimrc 中有我的 python 配置,如下所示

au BufNewFile,BufRead *.py
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set textwidth=89 | " PEP-8 prefers 80
\ set expandtab |
\ set autoindent |
\ set foldmethod=syntax
au BufNewFile *.py set fileformat=unix

当我第一次编辑一个新的 python 文件时,expandtabs 设置没有问题。但是,当我从 vim 中打开第二个 python 文件时,它会打开该文件并将其识别为 python 文件( filetype=python ),但 expandtab已关闭!如果我打开第三个、第四个或第五个文件,也会发生同样的情况。

现在,如果我改为开始 Vim 编辑第二个 python 文件, expandtab设置正确!但是,当我打开第一个 python 文件进行编辑时, expandtab已关闭。即使我启动 Vim 编辑两个文件(例如从 bash 运行 vim margins.py marginsio.py),第一个缓冲区也有 expandtab按预期设置,但第二个缓冲区没有 expandtab放。现在,如果我用一个非 python 文件启动 Vim,然后打开一个 python 文件进行编辑,python 文件有 expandtab .但是,我打开的任何后续 python 文件都没有 expandtab放。

最后,如果我运行 vim,说 vim margins.py ,然后打开一个新的python文件marginsio.py(我打开它时没有设置 expandtab),然后关闭margins.py,然后从vim中重新打开margins.py,margins.py有 expandtab放!

在适用于 Linux 的 Windows 子系统(在 Windows 10 上)上的 Ubuntu 14.04.5 上运行 Vim 7.4。我假设 WSL 在这里没有效果,但我已经使用 Vim 多年并且以前从未(故意)遇到过​​这种情况。没有 set noexpandtab在我的 .vimrc 或我的任何 ~/.vim/配置中,如果我在没有插件的情况下运行 vim,问题仍然存在。

最佳答案

我无法重现您在将设置应用于第一个文件而不是后续文件时遇到的问题,但我想我可以帮助您调试它。

首先,尝试在没有其他配置的情况下进行测试。创建一个名为 testvimrc 的文件仅包含以下内容:

set nocompatible

au BufNewFile,BufRead *.py
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set textwidth=89 |
\ set expandtab |
\ set autoindent |
\ set foldmethod=syntax
au BufNewFile *.py set fileformat=unix

然后启动 vim
vim -u testvimrc somefile.py

看看你是否仍然有你描述的行为。如果我这样做,所有 Python 文件都使用指定的设置,无论是通过命令行加载,还是从 Vim 内部手动加载。这使我相信问题出在您的配置中的其他地方。

要了解可能发生的情况,您可以使用 verbose命令。回到正常的 Vim 配置(这次不要使用 -u testvimrc)。看看最后一组 expandtab :
:verbose set expandtab?

那应该以类似的方式回应
  expandtab
Last set from ~/.vimrc

如果您看到其他任何内容,您就会知道它在哪里被覆盖。你可能会看到类似的东西
Last set from /usr/share/vim80/ftplugin/python.vim

这将帮助您确定有问题的插件或其他冲突来源。更改 .vimrc 中的设置顺序如果是这样,可能会有所帮助。

然而,有一个更好的解决方案。

如果您想覆盖特定于类型的设置,则有内置支持。上面有一个提示,在 python.vim line: Vim 已经知道你何时编辑 Python 文件,它会寻找匹配的 ftplugin。首先,它应用与它一起分发的那个(对我来说, /usr/share/vim80/ftplugin/python.vim)。然后它会在您的 runtimepath 中查找覆盖。 .默认情况下, runtimepath 中的最后一个目录是 ~/.vim/after ,这意味着其中的任何内容都将覆盖所有先前的设置。

创建文件 ~/.vim/after/ftplugin/python.vim并覆盖那里的设置。您应该使用 setlocal而不是 set所以它只影响 Python 缓冲区。把这个放在里面:
setlocal tabstop=4
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal textwidth=89
setlocal expandtab
setlocal autoindent
setlocal foldmethod=syntax
setlocal fileformat=unix

现在,每当您使用 filetype=python 加载或创建缓冲区时, ,这些设置将被应用,覆盖来自任何其他插件或冲突源的设置。您可以通过运行 :verbose set 来验证您的设置是否正在被使用。再次。

关于ubuntu - 打开 *second* 文件时 Vim 不遵循配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48755878/

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