Berurusan dengan nama file case sensitif pada Windows


8

Saya menggunakan vim / gvim terbaru (8.0.118), tetapi telah memperhatikan masalah ini di masa lalu, dengan versi lain.

Saya membuat file bernama fizzbuzz.java(di luar gvim), dan membukanya di tab baru di gvim pada PC Windows 7 saya di tempat kerja, menggunakan menu konteks manajer file saya. Setelah menutup tab, menggunakan :x, saya menemukan bahwa saya harus mengubah nama file FizzBuzz.java, agar sesuai dengan nama kelas yang saya tulis, yang saya lakukan di luar gvim.

Namun, ketika saya pergi untuk membukanya kembali dalam contoh gvim yang sama, sekali lagi menggunakan menu konteks dari manajer file saya, itu kembali ke casing asli, dan ketika saya menutupnya :x, menyimpannya seperti itu, sehingga saya harus ganti nama file lagi. Hanya setelah menghapus buffer, dan me-refresh daftar buffer dalam menu, saya bisa membuat gvim mengenali casing nama file dengan benar.

Ini tidak terjadi di gvim 7.4 di Linux (PCLinuxOS)

Apakah ada cara yang lebih mudah untuk membuat gvim mengenali, dan mempertahankan perubahan dalam casing nama file di Windows, tanpa memulai ulang gvim?


1
Saya tidak dapat mereproduksi masalah Anda, tetapi kata-kata Anda tidak tepat sehingga saya mungkin akan melewatkan sesuatu: I created a file named fizzbuzz.javaAnda membuatnya secara manual di penjelajah atau digunakan :e fizzbuzz.java? After closing the filemaksud Anda menutup buffer fizzbuzz.javadengan :bd? I had to rename it to FizzBuzz.javadi penjelajah Anda, bukan dengan :saveas? it reverts to the original casing, and saves it as suchdi mana Anda melihatnya dengan nama aslinya? so that I had to rename the file againlagi bagaimana Anda menamainya kembali? refreshing the buffer list in the menumenu yang mana?
statox

Memperbarui pertanyaan untuk menambahkan jawaban ke pertanyaan Anda. Membuat dan mengganti nama file di luar gvim. Casing asli ditampilkan di bilah status ketika saya membuka kembali file di gvim menggunakan manajer file saya.
Herb Wolfe

Terima kasih atas hasil editnya. Mengikuti alur kerja Anda, saya masih tidak dapat mereproduksi masalah ini. Saya pikir itu adalah perilaku aneh karena nama file sepenuhnya ditangani oleh OS ... Saya harap seseorang akan dapat membantu Anda :)
statox

2
Ya, vim tampaknya menggunakan kembali nama asli karena ia mengingat buffer. Sebagai solusinya, cobalah :f %.
Antony

@Antony jika Anda ingin menambahkan itu sebagai jawaban, saya akan menerimanya.
Herb Wolfe

Jawaban:


1

Kenapa ini terjadi?

Ketika Anda menutup file :x, itu menyimpan buffer dan menutup jendela / tab, tetapi Vim tidak melupakan file. Jika Anda menjalankan :lsperintah setelah melakukannya, Anda akan melihat buffer masih ada.

Kemudian, ketika Anda membuka kembali file tersebut, Vim akan melihat bahwa file tersebut sudah memiliki buffer dengan nama file yang "sama" (karena sistem file Anda mempertahankan kasus tetapi tidak peka terhadap huruf besar-kecil, fizzbuzz.javadan FizzBuzz.javasetara dengan yang berkaitan dengan identitas file), dan menggunakan kembali buffer, dengan nama file huruf kecil.

Solusinya

Untuk mencegah hal ini, alih-alih hanya menutup jendela, Anda perlu memberitahu Vim untuk membuang buffer sepenuhnya, dengan menggunakan :bwipeoutperintah. Ini sepenuhnya menghapus buffer dari Vim, dan ketika Anda membukanya kembali, itu memperlakukannya sebagai buffer yang sama sekali baru, dan menggunakan nama file huruf besar dari sistem file.

Solusi alternatif

Catatan yang :bwipeoutmemiliki beberapa efek lainnya . Jika ini adalah masalah, Anda bisa menggunakan penyelesaian yang disarankan oleh Antony di komentar , yaitu untuk memungkinkan Vim membuka file menggunakan nama file huruf kecil, tetapi kemudian ganti nama buffer untuk mencocokkan nama huruf besar dengan nama :file {name}perintah:

:f %

0

Tutup vim sepenuhnya, dan buka kembali file secara manual (misal :edit FileName.extalih-alih :MRU), memastikan tidak ada nama yang buruk dalam path.

Saya baru saja memecahkan masalah yang sama di mana nama file saya di vim adalah huruf kecil, tetapi jalur sebenarnya adalah huruf besar, dan Buronan tidak dapat menemukan file yang lebih kecil untuk alasan apa pun. Tampaknya tetap bertahan bahkan setelah saya meluncurkan kembali vim dan membuka file.

Masalahnya sebenarnya adalah bahwa plugin MRU yang saya gunakan (CtrlP) telah berhasil menyimpan nama file huruf kecil, jadi setelah memulai ulang vim, ketika saya mengetik secara manual :e UpperCaseFileName.type, alih-alih melalui file MRU melalui plugin, ia menggunakan jalur yang benar.


Saya tidak menggunakan plugin MRU. Tampaknya ini merupakan masalah buffer internal.
Herb Wolfe

Ini masalah yang sama, Anda telah membuka file lowercase.cppdan ingin membuka LowerCase.cpp. Ini mungkin bug tetapi solusi yang sama.
TankorSmash
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.