2012-05-04 17 views
6

Có cách nào để mở mã khi đi đến một số dòng không? Ví dụ: tôi nhập :35 nơi dòng 35 được gấp lại, sau đó tôi phải mở phần đó theo cách thủ công để thực sự truy cập vào dòng đó. Tôi muốn nhập :35 và sau đó tự động mở mã đó và con trỏ của tôi được đặt trên dòng 35 mà không cần nhấn phím nào khác.Tự động mở rộng gấp khi đi đến một số dòng

Trả lời

7

Nếu bạn sử dụng lệnh 35G thay vì :35, bạn có thể đạt được điều này với các bản đồ sau:

"[count]G  Also open fold under cursor when supplying [count] (i.e. 
"    jumping to a particular line, not the end of the 
"    buffer). Use [count]|gg| if you don't want this. 
nnoremap <expr> G (v:count ? 'Gzv' : 'G') 

Đối :35 chính nó, điều này sẽ khó đạt được. Bạn sẽ phải chặn số <CR> qua số :cmap <expr>, kiểm tra lệnh đã nhập qua getcmdtype()getcmdline() và nếu đó là số, hãy điều khiển lệnh, tức là gắn thêm normal! zv vào đó; như thế này:

cmap <expr> <CR> getcmdtype() == ':' && getcmdline() =~ '^\d\+$' ? 'normal! zv<CR>' : '<CR>' 
2

zv. Từ :help zv:

View cursor line: Open just enough folds to make the line in 
    which the cursor is located not folded. 

Trong khi lệnh này có thể có thể được kích hoạt tự động một cách nào đó, tôi đã không đi qua nó được nêu ra. Tuy nhiên, việc sử dụng lệnh as-is đã phục vụ tốt cho tôi.

+0

Kết hợp điều này thành ': au CursorMoved *: normal zv' nên thực hiện thủ thuật. – MaienM

+0

@MailenM: Điều đó sẽ mở bất kỳ nếp gấp nào bạn di chuyển qua, ngay cả khi di chuyển bằng 'j' /' k' - tôi nghi ngờ điều này hữu ích. –

0

Xác định ánh xạ lệnh mới. Trong ví dụ này, tôi đã chọn \gz:

:nmap \gz gg<Bar>zO