Chặn các thay đổi để chỉ đọc tệp


14

Khi sử dụng Vim để chỉnh sửa tệp chỉ đọc, nó sẽ chỉ đưa ra cảnh báo lần đầu tiên được chỉnh sửa nhưng cho phép mọi thay đổi diễn ra. Tôi có thể hiểu hành vi này có thể hữu ích cho ai đó có ý định lưu tệp dưới tên khác; nhưng đôi khi tôi mở các tệp mà tôi không có quyền ghi, sau đó quên và thực hiện các thay đổi.

Có thể vào chế độ trong đó Vim sẽ cho phép tệp được xem nhưng chặn bất kỳ tùy chọn nào thực hiện thay đổi?

Câu trả lời:


13

Tôi tìm thấy một giải pháp. Cài đặt nomodifiablengăn tệp được chỉnh sửa (như được sử dụng trong cửa sổ trợ giúp). Tôi đã tạo một hàm đơn giản để đặt hoặc hủy đặt modifiabletùy thuộc vào nếu readonlyđược đặt và gắn nó vào autocmd.

" Don't allow editing of read only files
autocmd BufRead * call RONoEdit()

function! RONoEdit()
  if &readonly == 1
    set nomodifiable
  else
    set modifiable
  endif
endfunction

4
Bạn có thể làm cho nó ngắn hơn bằng cách thực hiện:let &modifiable = !&readonly
Martin Tournoij

@Carpetsmoker Tốt hơn nhiều như một lớp lót, cảm ơn! Tuy nhiên, nó vẫn phải là: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinPal

Với điều này, sau khi mở một readonlytệp và sau đó tạo một bộ đệm mới, bộ đệm mới kết thúc nomodifiable.
Praxeolitic

Cảm ơn đã chỉ ra rằng, tôi đã không nhận thấy. Tôi không chắc chắn làm thế nào để kiểm tra bộ đệm mới.
ZeroKelvinPal 24/07/2015

1
@Praxeolitic: Tôi vừa đăng một câu trả lời nên giải quyết vấn đề này, hãy cho tôi biết nếu nó hoạt động.
s4y

7

Thêm phần này vào .vimrc của bạn:

autocmd BufRead * let &l:modifiable = !&readonly

Điều này được xây dựng dựa trên câu trả lời của @ ZeroKelvinPal để chỉ ảnh hưởng đến bộ đệm hiện tại.
s4y

0

Nhiều câu trả lời ở trên là chính xác, có một điều cần tính đến: miễn là tệp "chỉ đọc", sẽ không có cách nào thay đổi nội dung của tệp trừ khi bạn là chủ sở hữu của tệp hoặc có quyền ghi tập tin đó Và thậm chí sau đó vim không ghi các thay đổi vào tệp trừ khi bạn ghi đè rõ ràng trạng thái "chỉ đọc" bằng ": w!".

Nếu trên thực tế bạn có thể chỉnh sửa một tệp được cho là chỉ đọc, bạn có thể muốn kiểm tra lại các quyền, có thể có cấu hình sai bảo mật. Nếu bạn chỉ làm cho vim không thể chỉnh sửa tệp, các cách chỉnh sửa khác sẽ vẫn được áp dụng vì vậy nếu tệp không bị thay đổi, thì nó phải được đặt quyền. Trong các cửa sổ, bạn có thể buộc tệp chỉ đọc bằng cách từ chối rõ ràng quyền thay đổi đối với mọi người, trong Linux, bạn có thể sử dụng thuộc tính mở rộng "bất biến" (chattr + i).


2
Xin lỗi nếu tôi không rõ ràng. Câu hỏi này không phải là về việc vô tình thay đổi một tập tin chỉ đọc; Tôi muốn ngăn bản thân mình không thể chỉnh sửa bộ đệm của một tệp mà tôi không có quyền ghi. Đôi khi tôi vô tình mở các tệp cấu hình hệ thống như một người dùng thông thường chứ không phải là người dùng root. Trong trường hợp này, tôi không có quyền ghi vào tệp, vì vậy bộ đệm xuất hiện dưới dạng chỉ đọc nhưng Vim vẫn sẽ cho phép tôi chỉnh sửa bộ đệm. Khi tôi cố gắng lưu, tôi không thể vì tôi không có quyền ghi. Tôi muốn Vim chặn các thay đổi đối với bộ đệm trong trường hợp này.
ZeroKelvinPal

Ah tôi thấy. Tôi có ý tưởng rằng bạn muốn điều này là một sự không an toàn. Bỏ qua câu trả lời của tôi sau đó :)
mikky

OP có nghĩa là khi một người mở một tệp không chỉ đọc trong HĐH, nhưng anh ấy / cô ấy hiện không muốn (hoặc xem xét phù hợp để) thực hiện thay đổi và muốn hạn chế bản thân không làm. Tôi đang nghĩ chính xác như vậy, do đó sẽ đến đây từ Google!
Viol CHƯƠNGin
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.