Có phải bộ cài đặt lệnh của Wap chỉ ảnh hưởng đến bộ đệm đang hoạt động?


14

Tôi có hai bộ đệm trong vim:

:ls
  1 %a   ".vimrc"                       line 1
  2 #h   "script.sh"                    line 1
Press ENTER or type command to continue

Như đã thấy ở trên, tôi đang ở bộ đệm đầu tiên. Bây giờ nếu tôi thực thi :set softtabstop=16lệnh, thì tôi hy vọng nó sẽ ảnh hưởng đến cả hai bộ đệm. Tuy nhiên, đây không phải là trường hợp - trong khi stsgiá trị cho bộ đệm đầu tiên thực sự thay đổi và Tabkhóa chèn bốn ký tự tab ( ts=4), thì đối với bộ đệm thứ hai, stsgiá trị vẫn là 4:

:ls
  1 #h + ".vimrc"                       line 1
  2 %a + "script.sh"                    line 1
  softtabstop=4
Press ENTER or type command to continue

Tại sao lại như vậy? Tôi nghĩ rằng nó setảnh hưởng đến tất cả các bộ đệm và setlocalchỉ ảnh hưởng đến bộ đệm hoạt động ..

Câu trả lời:


25

Các tùy chọn có thể là toàn cục , cửa sổ cục bộ hoặc bộ đệm cục bộ .

Khi bạn :setlà một lựa chọn toàn cầu , giá trị mới là toàn cầu .

Khi bạn :setlocalmột tùy chọn toàn cầu , giá trị mới là cục bộ .

Khi bạn :setmột tùy chọn cục bộ , giá trị mới là cục bộ .

softtabstoplà một tùy chọn cục bộ đệm , thay đổi giá trị của nó chỉ ảnh hưởng đến bộ đệm hiện tại.

"Phạm vi" của một tùy chọn được chỉ định trong :help option:

'softtabstop' 'sts'    number    (default 0)
                       local to buffer
                       {not in Vi}
Number of spaces that a <Tab> counts[...]

:help local-options, :help :setlocal:help global-localgiải thích tất cả những điều đó chi tiết hơn.


3
Ngoài ra còn có một :setglobal.
Sato Katsura

3
Ngoài ra, một số tùy chọn là toàn cầu, bất kể bạn đặt chúng như thế nào. Ví dụ 'encoding'.
Antony

Có cách nào để thiết lập chức năng cục bộ theo id bộ đệm và giá trị tùy chọn với một số vimscriptlệnh gọi chức năng không?
St.Antario

Có một chức năng setbufvarcó thể được sử dụng để đạt được điều đó. Không tìm thấy nó lúc đầu.
St.Antario

2

Không phải là một chuyên gia, @Martin, nhưng từ khi đọc, :help setbạn sẽ cần "bỏ đặt" giá trị cục bộ của ststừng bộ đệm để bộ đệm đó nhận bất kỳ giá trị toàn cầu mới nào. setlocal sts= (hoặc cho cờ boolean, setlocal flag<). Kinda có ý nghĩa, cài đặt cục bộ được khởi tạo cho các giá trị toàn cầu hiện tại khi mở, sau đó giữ các giá trị cục bộ cho đến khi được nói khác đi. Nếu không có cài đặt cục bộ nào trong trò chơi, nó sẽ nhận bất kỳ giá trị toàn cầu mới nào.

Một lần nữa, không phải là một chuyên gia, tôi sẽ đoán rằng bộ đệm thứ hai có cài đặt cục bộ rõ ràng trước đó set. Hơn 50/50 rằng sự hiểu biết của tôi là sai, vì tôi vẫn chưa rõ về sự khác biệt giữa setsetgloballà gì .

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.