Xử lý tên tệp không phân biệt chữ hoa chữ thường trên Windows


8

Tôi đang sử dụng vim / gvim mới nhất (8.0.118), nhưng đã nhận thấy vấn đề này trong quá khứ, với các phiên bản khác.

Tôi đã tạo một tệp có tên fizzbuzz.java(bên ngoài gvim) và mở tệp đó trong tab mới trong gvim trên PC Windows 7 của tôi tại nơi làm việc, sử dụng menu ngữ cảnh của trình quản lý tệp của tôi. Sau khi đóng tab, sử dụng :x, tôi phát hiện ra rằng tôi phải đổi tên tệp thành FizzBuzz.java, để khớp với tên của lớp tôi đã viết, mà tôi đã làm bên ngoài gvim.

Tuy nhiên, khi tôi mở lại nó trong cùng một ví dụ của gvim, một lần nữa sử dụng menu ngữ cảnh của trình quản lý tệp của tôi, nó sẽ trở lại vỏ ban đầu và khi tôi đóng nó :x, nó sẽ lưu nó như vậy, do đó tôi phải đổi tên tập tin một lần nữa. Chỉ sau khi xóa bộ đệm và làm mới danh sách bộ đệm trong menu, tôi mới có thể nhận được gvim để nhận ra chính xác vỏ mới của tên tệp.

Điều này không xảy ra trong gvim 7.4 trên Linux (PCLinuxOS)

Có cách nào dễ dàng hơn để gvim nhận ra và giữ lại sự thay đổi trong vỏ của tên tệp trên Windows mà không cần khởi động lại gvim không?


1
Tôi không thể tái tạo vấn đề của bạn, nhưng từ ngữ của bạn không chính xác vì vậy tôi có thể bắt chước một cái gì đó: I created a file named fizzbuzz.javabạn tự tạo nó trong trình thám hiểm của mình hoặc sử dụng :e fizzbuzz.java? After closing the filebạn có nghĩa là đóng bộ đệm fizzbuzz.javavới :bd? I had to rename it to FizzBuzz.javatrong thám hiểm của bạn, không phải với :saveas? it reverts to the original casing, and saves it as suchBạn thấy nó ở đâu với tên gốc? so that I had to rename the file againmột lần nữa làm thế nào bạn đổi tên nó? refreshing the buffer list in the menuthực đơn nào
statox

Cập nhật câu hỏi để thêm câu trả lời cho câu hỏi của bạn. Tạo và đổi tên tập tin bên ngoài gvim. Vỏ ban đầu hiển thị trên thanh trạng thái khi tôi mở lại tệp trong gvim bằng trình quản lý tệp của mình.
Herb Wolfe

Cảm ơn bạn đã chỉnh sửa. Theo quy trình công việc của bạn tôi vẫn không thể tái tạo vấn đề này. Tôi nghĩ đó là một hành vi kỳ lạ vì tên tệp được xử lý hoàn toàn bởi HĐH ... Tôi hy vọng ai đó sẽ có thể giúp bạn :)
statox

2
Vâng, vim dường như sử dụng lại tên gốc vì nó nhớ bộ đệm. Như một cách giải quyết, hãy thử :f %.
Antony

@Antony nếu bạn muốn thêm nó dưới dạng câu trả lời, tôi sẽ chấp nhận nó.
Herb Wolfe

Câu trả lời:


1

Tại sao điều này xảy ra

Khi bạn đóng tệp :x, nó sẽ lưu bộ đệm và đóng cửa sổ / tab, nhưng Vim không quên tệp. Nếu bạn thực thi :lslệnh sau khi làm như vậy, bạn sẽ thấy bộ đệm vẫn còn đó.

Sau đó, khi bạn mở lại tệp, Vim sẽ nhận thấy rằng nó đã có bộ đệm với tên tệp "giống nhau" (vì hệ thống tệp của bạn bảo quản trường hợp nhưng không phân biệt chữ hoa chữ thường fizzbuzz.javaFizzBuzz.javatương đương với nhận dạng của tệp), và sử dụng lại bộ đệm, với tên tệp chữ thường.

Giải pháp

Để ngăn chặn điều này, thay vì chỉ đóng cửa sổ, bạn cần yêu cầu Vim loại bỏ hoàn toàn bộ đệm, bằng cách sử dụng :bwipeoutlệnh. Điều này loại bỏ hoàn toàn bộ đệm khỏi Vim và vì vậy khi bạn mở lại nó, nó coi nó như một bộ đệm hoàn toàn mới và sử dụng tên tệp chữ hoa từ hệ thống tệp.

Một cách giải quyết khác

Lưu ý rằng :bwipeoutmột số hiệu ứng khác . Nếu đây là một vấn đề, thay vào đó, bạn có thể sử dụng cách giải quyết được đề xuất bởi Antony trong các nhận xét , đó là cho phép Vim mở tệp bằng tên tệp chữ thường, nhưng sau đó đổi tên bộ đệm để khớp với tên chữ hoa với :file {name}chỉ huy:

:f %

0

Đóng hoàn toàn vim và mở lại tệp theo cách thủ công (nghĩa là :edit FileName.extthay vì :MRU), đảm bảo không có tên bị lỗi trong đường dẫn.

Tôi vừa giải quyết một vấn đề tương tự trong đó tên tệp của tôi trong vim là chữ thường, nhưng đường dẫn thực tế là chữ hoa và Fugitive không thể tìm thấy tệp có ký tự thấp hơn vì bất kỳ lý do gì. Nó dường như vẫn tồn tại ngay cả sau khi tôi khởi động lại vim và mở tập tin.

Vấn đề thực sự là plugin MRU mà tôi đang sử dụng (CtrlP) đã quản lý để lưu tên tệp chữ thường, vì vậy sau khi khởi động lại vim, khi tôi nhập thủ công :e UpperCaseFileName.type, thay vì đi qua tệp MRU qua plugin, nó đã sử dụng đúng đường dẫn.


Tôi không sử dụng plugin MRU. Có vẻ như đó là một vấn đề bộ đệm nội bộ.
Herb Wolfe

Đó là cùng một vấn đề, bạn đã mở tệp lowercase.cppvà muốn mở LowerCase.cpp. Đây có thể là một lỗi nhưng đó là giải pháp tương tự.
TankorSmash 27/03/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.