Bất cứ ai cũng biết cách nhanh chóng tìm thấy sự xuất hiện tiếp theo của một ký tự (như lệnh f) nhưng đa dòng? I E. để nhanh chóng chuyển sang lần xuất hiện tiếp theo của một số ký tự trong một tệp?Sử dụng lệnh f của vim qua nhiều dòng
Trả lời
Đó không phải là những gì "/" không?
Nếu bạn đang tìm kiếm "x" tiếp theo, hãy thực hiện/x trong khi ở chế độ lệnh.
Sau đó, bạn có thể nhấn "n" để tiến tới x tiếp theo, và sau đó dấu x bên cạnh vv
Có rất nhiều vim cheat sheets ra khỏi đó với tất cả các loại lời khuyên.
Cảm ơn! Tôi thực sự biết/và đã tự hỏi nếu bạn biết một cách nhanh hơn (xin lỗi tôi đã không nói rằng trong câu hỏi ban đầu). Thay vì gõ/và sau đó cần gõ
hmm ... "fx" là hai lần nhấn phím. nhấn "/ x
@Koko - câu trả lời là, vâng, có một ký tự để tìm lần xuất hiện tiếp theo, chữ 'n' . Và đó là bao gồm trong câu trả lời. – KevinDTimm
Có ví dụ về việc xác định lại f
để bỏ qua trường hợp trong tệp trợ giúp 'eval.txt'.
:h eval.txt
(tìm kiếm cho "bỏ qua trường hợp" một vài lần)
Chúng tôi có thể thay đổi đó để làm những gì bạn muốn. Thêm hàm sau vào tệp ~/.vimrc
của bạn hoặc tốt hơn, tạo tệp plugin: ~/.vim/plugin/find-char.vim
(tạo các thư mục nếu bạn chưa có chúng).
function FindChar()
let c = nr2char(getchar())
let match = search('\V' . c)
endfunction
Sau đó, trong ~/.vimrc
bạn thêm dòng sau:
nmap f :call FindChar()<CR>
Bây giờ, f
nên làm việc như bạn muốn nó.
BTW, điều này đã được thử nghiệm với Vim 7,2 trên Ubuntu 10.04.
điều này sẽ không hoạt động nếu bạn đang tìm kiếm '$', '\', '^' hoặc '/' trong số những thứ khác (cũng có thể dấu sao, dấu hỏi, vv. Bạn có thể 'cho lệnh = "bình thường!/\ V" c. "^ M" '. Vẫn còn điều này sẽ không làm việc cho dấu gạch chéo ngược. – Benoit
@Benoit: Ahh, các nhân vật đặc biệt, tôi nên biết rõ hơn. Tôi đã cập nhật phản hồi. –
Bạn có thể bỏ qua câu lệnh if nếu bạn chỉ cần thêm vào mỗi mẫu tìm kiếm với '\ V' - hàm FindChar() để c = nr2char (getchar()) cho phép match = search ('\ V'. C) endfunction –
Bạn có thể tạo ra một bản đồ để đi đến ký tự tiếp theo dưới con trỏ:
:map f yl/\V<c-r>"<c-m>
các \ V sẽ đảm bảo những biểu tượng được kết hợp theo nghĩa đen.
Ngoài ra, bạn có thể muốn xem các lệnh *
và #
, đã được xác định cho bạn, mặc dù chúng có thể không phải là thứ bạn muốn.
Aaaa, vimscript. Mất khoảng 2 năm để viết 20 dòng tốt: D. Đây là phiên bản mới nhất, đẹp nhất: hoạt động cho TẤT CẢ các chế độ: hình ảnh, toán tử đang chờ xử lý, bình thường.
let prvft='f'
let prvftc=32
fun! MLvF(c,...)
let [g:prvftc,g:prvft]=[a:c,a:0? 'f':'F']
let pos=searchpos('\C\V'.nr2char(g:prvftc),'bW')
call setpos("'x", pos==[0,0]? [0,line('.'),col('.'),0] : [0,pos[0],pos[1],0])
return "`x"
endfun
fun! MLvf(c,...)
let [g:prvftc,g:prvft]=[a:c,a:0? 'F':'f']
let pos=searchpos('\C\V'.nr2char(g:prvftc).(mode(1)=='no'? '\zs' : ''),'W')
call setpos("'x", pos==[0,0]? [0,line('.'),col('.'),0] : [0,pos[0],pos[1],0])
return "`x"
endfun
fun! MLvT(c,...)
let [g:prvftc,g:prvft]=[a:c,a:0? 't':'T']
let pos=searchpos('\C\V'.nr2char(g:prvftc).'\zs','bW')
call setpos("'x", pos==[0,0]? [0,line('.'),col('.'),0] : [0,pos[0],pos[1],0])
return "`x"
endfun
fun! MLvt(c,...)
let [g:prvftc,g:prvft]=[a:c,a:0? 'T':'t']
let pos=searchpos('\C\V\_.'.(mode(1)=='no'? '\zs' : '').nr2char(g:prvftc),'W')
call setpos("'x", pos==[0,0]? [0,line('.'),col('.'),0] : [0,pos[0],pos[1],0])
return "`x"
endfun
no <expr> F MLvF(getchar())
no <expr> f MLvf(getchar())
no <expr> T MLvT(getchar())
no <expr> t MLvt(getchar())
no <expr> ; MLv{prvft}(prvftc)
no <expr> , MLv{prvft<#'Z'? tolower(prvft) : toupper(prvft)}(prvftc,1)
Hoặc siêu bị cắt xén:
let [pvft,pvftc]=[1,32]
fun! Multift(x,c,i)
let [g:pvftc,g:pvft]=[a:c,a:i]
let pos=searchpos((a:x==2? mode(1)=='no'? '\C\V\_.\zs' : '\C\V\_.' : '\C\V').(a:x==1 && mode(1)=='no' || a:x==-2? nr2char(g:pvftc).'\zs' : nr2char(g:pvftc)),a:x<0? 'bW':'W')
call setpos("'x", pos[0]? [0,pos[0],pos[1],0] : [0,line('.'),col('.'),0])
return "`x"
endfun
no <expr> F Multift(-1,getchar(),-1)
no <expr> f Multift(1,getchar(),1)
no <expr> T Multift(-2,getchar(),-2)
no <expr> t Multift(2,getchar(),2)
no <expr> ; Multift(pvft,pvftc,pvft)
no <expr> , Multift(-pvft,pvftc,pvft)
Có muốn biết chính xác những điều tương tự tôi nhìn qua các câu trả lời ở đây. Không ai trong số đó là chính xác những gì tôi muốn vì vậy tôi cobbled với nhau một vài người trong số họ.
Câu trả lời của q335 là gần nhất vì nó xử lý các phần đệm đúng cách cần thiết để làm điều gì đó như dt}
(xóa tất cả mọi thứ, nhưng không bao gồm dấu ngoặc nhọn tiếp theo) nhưng câu trả lời của Curt xử lý tìm kiếm ký tự đặc biệt và sử dụng một hàm duy nhất tôi là thích hợp hơn nhiều vì vậy tôi không thêm quá nhiều cho tôi.vimrc
Dưới đây là kết quả của tôi:
"Makes f and t work across multiple lines
nmap <silent> f :call FindChar(0, 0, 0)<cr>
omap <silent> f :call FindChar(0, 1, 0)<cr>
nmap <silent> F :call FindChar(1, 0, 0)<cr>
omap <silent> F :call FindChar(1, 1, 0)<cr>
nmap <silent> t :call FindChar(0, 0, 1)<cr>
omap <silent> t :call FindChar(0, 0, 0)<cr>
nmap <silent> T :call FindChar(1, 0, 1)<cr>
omap <silent> T :call FindChar(1, 0, 0)<cr>
"Functions
fun! FindChar(back, inclusive, exclusive)
let flag = 'W'
if a:back
let flag = 'Wb'
endif
if search('\V' . nr2char(getchar()), flag)
if a:inclusive
norm! l
endif
if a:exclusive
norm! h
endif
endif
endfun
Dường như hoạt động ok, nhưng nó không giữ lại char được tìm kiếm để sử dụng bởi ';' và ',' – joeytwiddle
Chuyển động để đóng dấu ngoặc nhọn:]} - nếu bạn muốn xóa: d]} - cũng hoạt động đối với parens]) - chuyển động để mở niềng răng là [{ –
Không hoạt động đối với tôi khi được bắt đầu bằng một số, ví dụ 'c2fa' thay đổi thành _first_' a'. –
Christian Brabandt của ft_improved plugin mở rộng tích hợp để tìm kiếm trong dòng này, quá f
/t
lệnh.
Cảm ơn, tôi đã thử điều đó. Nhưng tôi đã sử dụng http://github.com/dahu/vim-fanfingtastic (có thể làm việc với lệnh '.' nếu bạn cũng cài đặt http://github.com/tpope/vim-repeat). 9 tháng không có khiếu nại! – joeytwiddle
Cách hợp lý nhất để thực hiện việc này vào lúc này bị ẩn trong this comment.
Bạn chỉ cần cài đặt hai plugin: vim-repeat và vim-fanfingtastic.
Cá nhân, tôi sử dụng Vundle để quản lý plugin vim của mình.
Vì vậy, đây là cách bạn có thể làm f
, F
vv công việc như mong muốn:
- Install Vundle.
Thêm những dòng này để
.vimrc
của bạn:Plugin 'tpope/vim-repeat' Plugin 'dahu/vim-fanfingtastic'
- Run
$ vim +PluginInstall +qall
trong vỏ của bạn. - Thì đấy!
Một cách tiếp cận cho vấn đề này là sử dụng plugin easymotion.
Điều này cho phép bạn sử dụng các chuyển động như f
trên toàn bộ cửa sổ hiển thị của văn bản. Bạn kích hoạt plugin, sau đó nhập f
và ký tự bạn đang tìm kiếm. Nó đánh dấu từng vị trí mà ký tự xuất hiện trên màn hình bằng màu đánh dấu (ví dụ: màu đỏ) và hiển thị vị trí bằng cách sử dụng một chữ cái (a
, b
, c
, d
, ...). Bạn chỉ cần nhấn ký tự tương ứng với vị trí bạn muốn nhảy tới.
README của plugin trên Github bao gồm một hoạt ảnh minh họa trực quan cách hoạt động của nó.
- 1. Truyền lệnh 'sed' qua nhiều dòng
- 2. Sử dụng lệnh: g trong vim với nhiều hành động
- 3. Chạy tập lệnh vim từ dòng lệnh vim
- 4. Cách sử dụng lệnh 'f' của vim (tìm) để tìm tab tiếp theo
- 5. qmake: cách cung cấp nhiều biến thông qua dòng lệnh?
- 6. Vim Dòng lệnh Thoát Thời gian chờ
- 7. Việc sử dụng dấu chấm than ('!') Trong dòng lệnh của Vim là gì sau các lệnh nhất định như ": w!"?
- 8. Vim phiên bản chuyển động dọc của f & t?
- 9. Lệnh f và t làm gì trong Vim?
- 10. Vim yanking phạm vi của dòng
- 11. Dòng lệnh Perl nhiều dòng thay thế
- 12. Vim: loại sử dụng nhiều mô hình
- 13. VIM, Chạy lệnh trên nhiều tệp
- 14. Cắt và dán nhiều dòng trong vim
- 15. Sử dụng công cụ đánh dấu cú pháp của emacs 'hoặc vim cho chương trình dòng lệnh?
- 16. Lệnh nhiều dòng trong GHCi
- 17. Nhiều lệnh sử dụng JSch
- 18. Đối số dòng lệnh trong chương trình F #?
- 19. cửa sổ dòng lệnh nhiều lệnh
- 20. Sử dụng lệnh VIM trên tất cả các file mở
- 21. sử dụng tùy chọn -W của vim
- 22. sử dụng lệnh git và curl dòng lệnh
- 23. Sử dụng sendmail từ dòng lệnh
- 24. Biểu thức F # lambda với nhiều câu lệnh
- 25. Đặt JVM qua dòng lệnh trên Windows
- 26. Backticks của Ruby - lệnh ngắt thành nhiều dòng?
- 27. xcodebuild dòng lệnh bỏ qua GCC_PREPROCESSOR_DEFINITIONS
- 28. Cách sử dụng aspell trên dòng lệnh
- 29. Cách chuyển kết quả tìm đến lệnh argadd của vim
- 30. Dòng lệnh Python: bỏ qua thụt đầu dòng
Tôi [tóm tắt một số lựa chọn thay thế tại đây] (http://vi.stackexchange.com/questions/4486/expand-f-and-t-motion-to-next-lines#4525), bao gồm một tài liệu tôi đã viết trong đó * nhấp nháy * trên màn hình! – joeytwiddle