2008-11-01 63 views
229

Tôi chưa quen với VIM. Tôi sử dụng các lệnh :e:w để chỉnh sửa và viết tệp rất thuận tiện. Tôi không chắc chắn nếu có "đóng" lệnh để đóng tập tin hiện tại mà không để lại VIM?Đóng tệp mà không thoát khỏi ứng dụng VIM?

Tôi biết rằng lệnh :q có thể được sử dụng để đóng tệp, nhưng nếu đó là tệp cuối cùng thì VIM cũng bị đóng; Trên thực tế trên Mac OS MacVIM bỏ thuốc lá. Chỉ có cửa sổ VIM được đóng lại và tôi có thể sử dụng Control-N để mở lại VIM trống. Tôi muốn VIM vẫn mở với một màn hình trống.

Trả lời

306

này xóa bộ đệm (có thể dịch để đóng tập tin)

:bd 
+5

Trân trọng hơn tôi vì những gì OP hỏi, mặc dù tôi có xu hướng thích: enew vì tôi thích có bộ đệm trong danh sách bộ đệm. :) – Rytmis

+2

Khi tôi làm điều này, vim hiển thị bộ đệm đầu tiên, nhưng tôi vẫn có thể truy cập bộ đệm –

+12

@Martin, để xóa hoàn toàn bộ đệm, hãy sử dụng **: bw ** – sebnow

8

Nếu bạn đã lưu tệp cuối cùng rồi, thì: enew là bạn của bạn (: nếu bạn không muốn lưu tệp cuối cùng). Lưu ý rằng tệp gốc sẽ vẫn nằm trong danh sách bộ đệm của bạn (tệp có thể truy cập qua: ls).

17
:[N]bd[elete][!]      *:bd* *:bdel* *:bdelete* *E516* 
:bd[elete][!] [N] 
       Unload buffer [N] (default: current buffer) and delete it from 
       the buffer list. If the buffer was changed, this fails, 
       unless when [!] is specified, in which case changes are lost. 
       The file remains unaffected. Any windows for this buffer are 
       closed. If buffer [N] is the current buffer, another buffer 
       will be displayed instead. This is the most recent entry in 
       the jump list that points into a loaded buffer. 
       Actually, the buffer isn't completely deleted, it is removed 
       from the buffer list |unlisted-buffer| and option values, 
       variables and mappings/abbreviations for the buffer are 
       cleared.
20

Nếu bạn có nhiều cửa sổ chia cửa sổ trong vim của bạn sau đó: bd đóng cửa sổ chia của tập tin hiện tại ... vì vậy tôi muốn sử dụng một cái gì đó tiên tiến hơn một chút:

map fc <Esc>:call CleanClose(1) 

map fq <Esc>:call CleanClose(0) 


function! CleanClose(tosave) 
if (a:tosave == 1) 
    w! 
endif 
let todelbufNr = bufnr("%") 
let newbufNr = bufnr("#") 
if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr)) 
    exe "b".newbufNr 
else 
    bnext 
endif 

if (bufnr("%") == todelbufNr) 
    new 
endif 
exe "bd".todelbufNr 
endfunction 
+11

Bây giờ đoạn mã này có tác dụng gì? – dolzenko

+1

Bạn có thể muốn sau khi các cuộc gọi thực sự thực hiện lệnh. – dma

+2

@dolzenko nó ánh xạ 'fc' và 'fq' ở chế độ bình thường để tùy chọn lưu bộ đệm hiện tại rồi chuyển sang bộ đệm mới trước khi xóa bản gốc. Điều này bảo tồn bất kỳ chia tách bạn đã thiết lập. – dma

3

: bd có thể được ánh xạ. Tôi lập bản đồ cho F4, shift-F4 nếu tôi cần phải đóng cửa vì một số thay đổi mà tôi không muốn nữa.

37

Như đã đề cập, bạn đang tìm kiếm : bd, tuy nhiên điều này không hoàn toàn loại bỏ bộ đệm, nó vẫn còn truy cập:

:e foo 
:e bar 
:buffers 
    1 #h "foo"       line 1 
    2 %a "bar"       line 1 
Press ENTER or type command to continue 
:bd 2 
:buffers 
    1 %a "foo"       line 1 
Press ENTER or type command to continue 
:b 2 
2 bar 

Bạn thay vì có thể muốn : bw mà hoàn toàn loại bỏ nó.

:bw 2 
:b 2 
E86: Buffer 2 does not exist 

Không biết về : bw nghe trộm tôi cho khá trong một.

+0

Chỉ cần ghi nhớ rằng sự giúp đỡ của VIM nói điều này về ': bw' -" Đừng sử dụng điều này trừ khi bạn biết bạn đang làm gì. " – mato

5

Nếu bạn sửa đổi một tập tin và muốn đóng nó mà không bỏ VIM và không tiết kiệm, bạn nên gõ :bd!

-1

Tôi có cùng một vấn đề vì vậy tôi làm các plugin. Plugin này thay thế: q và các lệnh khác và sau đó ngăn cửa sổ đóng lại.

nếu bạn vẫn gặp sự cố, vui lòng thử sử dụng plugin sau. https://github.com/taka-vagyok/prevent-win-closed.vim

0

Tôi đã ánh xạ bd tới F4 bằng chèn phần sau vào tệp .vimrc của bạn và nhấn F4, nó sẽ đóng tệp hiện tại.

:map <F4> :bd<CR> 
Các vấn đề liên quan