2010-07-23 47 views
10

có cách nào để báo cho VIM đặt con trỏ tại vị trí nào đó sau khi mở rộng viết tắt không? Giả sử bạn có nội dung như thế này trong .gvimrcVị trí con trỏ trong chữ viết tắt VIM

iabberv <? <?=|?> 

và bạn muốn đặt con trỏ ở vị trí ký tự ống.

Trả lời

10

Một giải pháp nhanh chóng mà tôi muốn sử dụng trong trường hợp này là để chèn một số máy ép chìa khóa để tên viết tắt:

iabbrev <? <?=?><Left><Left> 

sẽ đặt con trỏ hai nơi trái, sau khi =.

Theo cách này, bạn có thể sử dụng các phím di chuyển khác nhau như <End>, <Home> hoặc thậm chí trở về chế độ bình thường với <Esc> và lệnh lệnh chế độ thông thường. Ví dụ sau đó sẽ là

iabbrev <? <?=?><Esc>hha 

và nó giống như ví dụ đầu tiên. Nếu bạn mở rộng chữ viết tắt có khoảng trống, nó sẽ có thêm một dấu cách. mà bạn có thể loại bỏ bằng cách sử dụng <BS> (backspace) trong tên viết tắt. Hoặc mở rộng với <C-]> sẽ không còn chỗ trống.

Correction: từ viết tắt được mở rộng đầu tiên, và sau đó không gian chèn, bạn cần một chức năng nhỏ được tìm thấy trong sự giúp đỡ (map.txt):

func Eatchar(pat) 
    let c = nr2char(getchar(0))  
    return (c =~ a:pat) ? '' : c  
endfunc 

này được đặt tốt nhất trong .vimrc. Bây giờ chữ viết tắt sau đây sẽ hoạt động hoàn toàn theo ý muốn:

:iabbrev <silent> <? <?=?><Left><Left><C-R>=Eatchar('\s')<CR> 

Có một cuộc gọi chức năng bên ngoài loại bỏ khoảng trắng và nó sẽ hoạt động tốt.

+0

tôi đã cố gắng iabbrev hha nhưng nó xóa "=" nhân vật :) nơi tôi nên đặt ? Đó là chính xác những gì tôi muốn, ngoại trừ vấn đề này . – ivan73

+0

Rất tiếc vì đã không thử nghiệm chức năng '' trước khi trả lời. Tôi đã chỉnh sửa trong một giải pháp thích hợp. – progo

+0

mát, nó hoạt động, chấp nhận câu trả lời này :) Tôi đang sử dụng nó như thế này: 'iabbrev hha = Eatchar ('\ s') ' – ivan73

0

Nó có thể được thực hiện với lh-map-tools:

" 
" in {rtp}/ftpluvin/vim/vim_snippets.vim 
inoreab <buffer> <silent> if  
     \ <C-R>=InsertSeq('if', 'if!cursorhere!\nendif!mark!')<CR> 

plugin khác cung cấp một tính năng tương tự.

4

Điều bạn muốn là các đoạn mã. Tôi sử dụng snipmate cho điều đó.

+0

Vote lên, nhờ cho tip Daenyth – ivan73

+0

Bạn nên có một cái nhìn trên [UltiSnips] (https://github.com/SirVer/ultisnips), nó thật tuyệt vời! – aymericbeaumet

Các vấn đề liên quan