Sử dụng! trong VIM


8

Tôi đã thấy rằng đôi khi :qhoạt động nhưng đôi khi chúng ta phải sử dụng :q!. Đây là trường hợp cho nhiều lệnh. Tôi đã tự hỏi những gì được sử dụng chung !trong vimvà khi nào sử dụng nó. Tôi đã cố gắng google nó, nhưng có vẻ như tìm kiếm đang bỏ qua dấu chấm than.


6
Nếu bạn đã cài đặt vim trên máy tính của mình, bạn cũng nên có gia sư vim tương tác. Từ dòng lệnh (KHÔNG từ bên trong vim) sử dụng vimtutor. Mất khoảng nửa giờ và là cách tốt nhất để tìm hiểu những điều cơ bản của vi / vim.
evilsoup

Câu trả lời:


23

Khi bạn không thực hiện thay đổi nào đối với nội dung thực tế của tệp, bạn chỉ cần thoát khỏi :q. Tuy nhiên, nếu bạn thực hiện chỉnh sửa, vim sẽ không cho phép thoát đơn giản vì bạn có thể không muốn từ bỏ những thay đổi đó (đặc biệt là nếu bạn đã sử dụng vim trong một thời gian dài để chỉnh sửa và sử dụng một :qcách tình cờ). Trong :q!trường hợp này là một lực lượng hoạt động bỏ (ghi đè cảnh báo). Bạn có thể đưa ra lệnh thoát khỏi tất cả các cửa sổ đã mở (chẳng hạn như các cửa sổ đã mở Ctrlwn) :qa!.

Bạn có thể viết các thay đổi và thoát bằng :wq(hoặc :x), và điều này đôi khi sẽ thất bại (tệp đã được mở dưới dạng chỉ đọc ( -Rtrên dòng lệnh hoặc vim được gọi bằng viewlệnh), trong trường hợp đó bạn có thể buộc thao tác ghi với :wq!.

Bên cạnh đó, bạn cũng có thể sử dụng ZQđể thực hiện thao tác tương tự :q!ZZthực hiện tương tự :wq, có thể dễ dàng hơn khi gõ tay :)

Vim cũng có một trợ giúp tích hợp mà bạn có thể truy cập thông qua :help; thoát có trang chủ đề nhanh của riêng nó : :help Q_wq.


2
Ở một ghi chú khác, bạn cũng có thể sử dụng !để chạy các lệnh shell như trong:!ls -l
Joseph R.

1
làm thế nào trong trường hợp ': r! lệnh 'là nó để buộc đầu ra của lệnh vào tệp
user2179293

:r! commandlà rất giống với !!command, cái trước sẽ chèn đầu ra lệnh trên dòng sau theo con trỏ, cái sau sẽ thay thế nội dung của dòng hiện có.
Drav Sloan

2

Không có "sử dụng chung" !, nó chỉ là một sửa đổi. Mỗi lệnh được chọn để thêm những gì !sẽ làm với nó.

Trong nhiều trường hợp, các lệnh được lập trình để !buộc chúng. Các ví dụ bao gồm qbạn đề cập, nhưng cũng save: save!sẽ ghi đè lên tệp nếu nó đã tồn tại, trong khi savesẽ trả về lỗi và đề nghị sử dụng save!nếu bạn chắc chắn về những gì bạn đang làm.

Cuối cùng, !chính nó được sử dụng cho các lệnh shell, ví dụ :!lshoặc :!mkdir foo.

Trong trường hợp read(từ nhận xét của bạn), lệnh read! <something>được Vim diễn giải là "thực thi <something>và đọc (nghĩa là, trong Vim, ghi vào bộ đệm) đầu ra của nó" . Vì vậy, ở đây nó như thể !hành vi không phải là một sửa đổi của readlệnh mà là lệnh độc lập !. Có thể là readlệnh không khai báo một biến thể với !Vim chỉ diễn giải phần còn lại một cách độc lập (vì vậy nó đọc " !được sử dụng một mình" sau read) hoặc readtuyên bố một biến thể !có hành vi cụ thể này ( "thực thi phần còn lại là shell" ) xảy ra để bắt chước những gì " !được sử dụng một mình" làm.

Tôi đoán rằng mang đi là: không có quy tắc, mỗi lệnh xác định những gì !sẽ làm và trong khi có một nỗ lực để có một sự nhất quán trong hiệu ứng của các sửa đổi, không có các quy tắc siêu nghiêm ngặt (như " !sẽ luôn luôn là buộc " ) cho phép có nhiều hành vi hữu ích hơn với ít lần nhấn phím hơn, đây cũng là một điểm cộng.


1
... cũng là sự khác biệt khó chịu giữa :w!cat:w !cat
muru
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.