Một cửa sổ đầu là gì?


10

Đôi khi tôi thấy một cửa sổ mở với tên scratch.

Tôi biết nó là một loại đệm / cửa sổ tạm thời.

Làm thế nào tôi có thể đóng thùng một?

:h scratch trả lại không có gì.

Câu trả lời:


11

Nó có lẽ là một bộ đệm đầu, có thể được đặt tên. Từ sự giúp đỡ:

vết trầy

Chứa văn bản có thể bị loại bỏ bất cứ lúc nào. Nó được giữ khi đóng cửa sổ, nó phải được xóa rõ ràng. Cài đặt:>

      :setlocal buftype=nofile
      :setlocal bufhidden=hide
      :setlocal noswapfile
  The buffer name can be used to identify the buffer, if you give it a meaningful name.

Điều này có thể được tìm thấy trong :help special-buffers.


1
:hlệnh được sử dụng để truy cập vào trợ giúp này?
wizzup

2
: h đệm, sau đó đọc xuống "Các loại bộ đệm đặc biệt". Bạn đã đi đúng hướng.
wbogacz

Khi bạn mở tệp bằng bất kỳ lệnh Vim nào, bộ đệm sẽ tự động được tạo. Ví dụ: nếu bạn sử dụng :edittệp để chỉnh sửa tệp, bộ đệm mới sẽ tự động được tạo. Một bộ đệm trống có thể được tạo ra bằng cách nhập :enewhoặc :newhoặc :vnew. Từ bộ đệm Vim Câu hỏi thường gặp: vim.fandom.com/wiki/Vim_buffer_FAQ
NeilG

2
@wizzup :helpgrep scratchbiến nó thành một trong 10 kết quả (trong phần cài đặt của tôi).
Giàu

2

Tôi nhớ một mẹo vim (đã được chuyển sang vim.wikia) về chủ đề này.

Phiên bản mới nhất của chức năng tôi sử dụng để tạo bộ đệm đầu cũng thiết lập:

  • 'buflisted' thành sai
  • 'readonly'

(Từ plugin thư viện VimL của tôi: lh-vim-lib)

function! lh#buffer#scratch(bname, where) abort
  try
    set modifiable
    " The next function takes care of working around this damn E36
    call lh#window#create_window_with(a:where.' sp '.escape(substitute(a:bname, '\*', '...', 'g'), '#%'))
  catch /.*/
    throw "Can't open a buffer named '".a:bname."'!"
  endtry
  setlocal bt=nofile bh=wipe nobl noswf ro
  return bufnr('%')
endfunction

2

Bộ đệm 'cào' chỉ là một thuật ngữ không chính thức cho một nơi để nhập nội dung tạm thời tùy ý.

Theo câu trả lời được chấp nhận và một câu hỏi khác, tôi đã tạo ra hàm sau trong vimrc của mình.

Hàm tạo một bộ đệm trống trong cửa sổ hiện tại và đặt tên là 'cào'. Bộ đệm đầu không được bảo vệ nếu bạn cố gắng thoát. Nó sẽ bị loại bỏ mà không cần nhắc ngay cả với những thay đổi chưa được lưu nếu bạn thoát Vim hoặc xóa nó ( :bw).

Đặt chức năng này trong vimrc của bạn. Để tạo một bộ đệm đầu sử dụng :call Scratch().

function! Scratch()
    split
    noswapfile hide enew
    setlocal buftype=nofile
    setlocal bufhidden=hide
    "setlocal nobuflisted
    "lcd ~
    file scratch
endfunction

Bạn có thể kiểm tra điều này một cách nhanh chóng bằng cách kéo các dòng và sau đó :@". Sau đó bạn có thể thử :call Scratch().

Một phần tách được sử dụng để bộ đệm hiện tại của bạn không bị ảnh hưởng khi bạn tạo bộ đệm đầu.

(Nếu bạn muốn bỏ qua splitchức năng thì bộ đệm hiện tại của bạn sẽ bị "ẩn" (không còn trong cửa sổ) khi bạn tạo bộ đệm đầu. Vim vẫn sẽ dừng và nhắc bạn nếu bạn cố thoát khỏi những thay đổi chưa được lưu trong đó đệm).

Bộ đệm đầu thông thường sẽ có cùng thư mục làm việc của bộ đệm bạn đang sử dụng khi bạn gọi hàm Scratch. Tôi đã bao gồm một dòng nhận xét để thay đổi thư mục làm việc bộ đệm đầu về nhà. Điều này dành cho những người có dòng trạng thái vui nhộn có thể hiển thị đường dẫn của thư mục hiện tại dưới dạng đường dẫn bộ đệm. Hoặc chỉ dành cho những người thích nó.

Bạn có thể đặt bộ đệm đầu thành "được liệt kê" hoặc "không được liệt kê" (được liệt kê theo mặc định). Nếu bạn làm cho nó không được liệt kê, bạn sẽ không thấy nó trong :buffersdanh sách của bạn , nhưng nó sẽ ở trong đó :buffers!. Bỏ ghi chú nobuflisteddòng nếu bạn muốn nó không được liệt kê. Được liệt kê hoặc không được liệt kê, bạn luôn có thể thay đổi bộ đệm đầu của bạn bằng :b scratchmọi cách. Làm cho bộ đệm đầu được liệt kê làm cho nó dễ tiếp cận hơn một chút. Ví dụ :sballsẽ bao gồm nó trong một tách.

Nếu bạn sử dụng :bw(xóa bộ đệm) trên bộ đệm đầu, Vim sẽ xóa nội dung và xóa bộ đệm mà không có cảnh báo. Nếu bạn sử dụng :bd(xóa bộ đệm) trên bộ đệm đầu, Vim sẽ bỏ nội dung mà không cảnh báo và làm cho bộ đệm không được liệt kê.

Bạn có thể tạo nhiều bộ đệm đầu. Vim bắt đầu phàn nàn nhưng cuối cùng bạn vẫn có thêm những người khác.


2
Việc thực thi không cần thiết. Chức năng của bạn chỉ có thể chạy enew, v.v.
D. Ben Knoble

1
Nếu bạn đặt buftype=hide trước khi đặt tên thì việc thay đổi thư mục là không cần thiết, vì tên bộ đệm sẽ không được "xử lý như tên tệp." Ngoài ra, có thể đáng nói 'nobuflisted', điều này ngăn bộ đệm hiển thị trong đầu ra của :ls. Bạn đã ám chỉ nó, nhưng không đề cập rõ ràng.
Giàu

Cảm ơn bình luận của bạn, @ D.BenKnoble. Tôi đã làm sạch chức năng theo lời khuyên của bạn.
NeilG

1
buftype=hidethực sự là vô nghĩa, và vâng, tôi đã thực sự nói về buftype=nofile:). Nhưng tôi không thể tái tạo hành vi mà bạn mô tả và vẫn tin rằng tuyên bố đó Vim buffer names are always filenameslà không chính xác. Nếu tôi loại bỏ cddòng khỏi chức năng của bạn và sau đó chạy nó, không có đường dẫn nào trong dòng trạng thái của tôi hoặc trong đầu ra của echo bufname('%')tôi tự hỏi liệu có lẽ đây là một vấn đề với dòng trạng thái của bạn chứ không phải là tên bộ đệm. 'statusline'Tùy chọn của bạn được đặt là gì?
Giàu

1
Aha! Vui mừng chúng tôi đã nhận ra nó! Nếu là tôi, tôi vẫn không muốn thay đổi thư mục trong chức năng Scratch, vì vậy thay vào đó tôi sẽ thay đổi statuslineđể sử dụng một cái gì đó như thế expand(&buftype == 'nofile' ? '%' : '%:p:~:h'), nhưng tôi nghĩ bây giờ chúng ta đang ở trong vương quốc của sở thích cá nhân. Nếu bạn quyết định gắn bó với giải pháp thư mục thay đổi, thì có lẽ tốt hơn là sử dụng :lcdđể giới hạn các thay đổi đối với cửa sổ đang đề cập, nhưng một lần nữa điều đó tùy thuộc vào bạn. Nhưng dù sao, tôi nghĩ rằng đây là một câu trả lời tuyệt vời. +1!
Giàu
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.