Vim 写入时覆盖文件名

Vim overwrites filename when writing

假设我有一个名为 FooBar.java 的文件。当我用

在 powershell window 中打开文件时

> vim foobar.java

并在编辑后写入文件,文件被重命名 FooBar.java -> foobar.java.

如果我用

打开文件

> vim FOOBAR.java

它被重命名为 FooBar.java -> FOOBAR.java。

因此 Vim 将名称更改为区分大小写,以适应我使用 powershell 命令打开文件时的拼写方式。这对我来说是不受欢迎的行为,在我全新安装 OS (Windows 10) 之前我没有遇到过这个问题。我使用与以前完全相同的 .vimrc 。这是一个巨大的麻烦,因为 java 对其文件名区分大小写。

但是,它似乎只发生在 .java 文件中。对于 .cpp 或 .txt 或 .csv 文件,无论我如何键入,文件的大小写都保持不变。

我的问题分为两部分:

  1. 为什么 Vim 突然这样做,而以前没有用相同的 .vimrc 这样做?
  2. 如何永久禁用此行为,最好使用 .vimrc 行?

有一个 3 个月前的副本,但由于我的互联网积分低,我无法对其发表评论,而且它有 0 个答案,所以我做了一个新的。

Vim save file in lower case

这是我的.vimrc:

的内容
"Created for Vim version 8.2

set clipboard+=unnamed

set backspace=indent,eol,start

set noswapfile
set undofile
set undodir=~\vimfiles\undodir

set encoding=utf8
set fileencoding=utf8

set autoindent
set smartindent
set tabstop=4
set shiftwidth=4

set hlsearch
set incsearch

set ignorecase
set smartcase

set number
set ruler
set linebreak
set showbreak=+

"set listchars=tab:>-,trail:.,extends:>
"set list

:nnoremap U :echo " < < ===== C H E C K   C A P S   L O C K ===== > > "<CR>

syntax on

set cursorline
hi cursorline ctermbg=darkblue
hi cursorline ctermfg=white
hi colorcolumn ctermbg=darkblue
hi linenr ctermfg=blue
hi preproc ctermfg=magenta
hi type ctermfg=yellow
hi statement ctermfg=magenta
hi constant ctermfg=darkgreen
hi special ctermfg=green
hi comment ctermfg=darkgrey
hi number ctermfg=red


filetype on

autocmd filetype cpp set colorcolumn=80,101
autocmd filetype cpp set nowrap

autocmd filetype hpp set colorcolumn=80,101
autocmd filetype hpp set nowrap

autocmd filetype c set colorcolumn=80,101
autocmd filetype c set nowrap

autocmd filetype h set colorcolumn=80,101
autocmd filetype h set nowrap

autocmd filetype java set colorcolumn=80,101
autocmd filetype java set nowrap

autocmd filetype python set colorcolumn=80
autocmd filetype python set nowrap

autocmd filetype gitcommit set colorcolumn=51,73
autocmd filetype gitcommit set nowrap

您可以通过以下方式解决此问题:

set backupcopy=yes

将此选项设置为默认值后,Vim 将通过重命名原始文件来备份原始文件,然后创建一个与您正在编辑的文件同名的新文件。但是在文件名不区分大小写的文件系统中(通常是 Windows),如果您使用大小写不同的名称引用文件,Vim 可能最终会创建大小写不同的新文件。

使用 backupcopy=yes 将 Vim 创建备份作为新副本(而不是重命名原始文件),然后它将覆盖原始文件。执行该操作时,文件名的大小写不会改变,因为 Vim 并不是真正创建新文件而是写入现有文件,因此文件系统将保留原始名称(以及任何属性原始文件。)

有关详细信息,请参阅 :help 'backupcopy'