2010-08-05 25 views
29

Trong một trong những trình soạn thảo dựa trên Eclipse mà tôi đã thử gần đây (tôi nghĩ đó là RubyMine), khi một từ khóa Ruby mở hoặc đã đóng một phương thức hoặc khối đã được chọn, từ khóa mở/đóng tương ứng được tô sáng. Tương tự như cách Vim có thể làm nổi bật dấu ngoặc đơn mở/đóng tương ứng.Vim: Làm nổi bật cặp từ khóa trong Ruby (def/end, do/end, vv)

Ví dụ: nếu tôi chọn 'def', nó sẽ đánh dấu 'end' tương ứng. Nó cũng làm việc cho các khối kết thúc/làm.

Điều này thực sự tiện dụng, đặc biệt đối với những tệp Rspec dài và đôi khi được lồng ghép nhiều.

Có ai biết làm thế nào để đạt được điều này trong Vim?

+2

Hãy xem ruby-matchit.vim - cho phép bạn thoát giữa 'def' ...' end' và 'class'..'end' và công ty bằng'% '. Logic nên giống nhau cho những gì bạn muốn. http://vim.sourceforge.net/scripts/script.php?script_id=290 – Telemachus

+1

Một plugin Vim hữu ích khác cho các cặp 'x' ...' end' là 'endwise' của Tim Pope, sẽ tự động chèn một' kết thúc' bất cứ khi nào bạn bắt đầu một phần yêu cầu một: http://github.com/tpope/vim-endwise – Telemachus

+0

Cảm ơn các ý kiến ​​Telemachus. Đây không phải là những gì tôi đang tìm kiếm, nhưng dù sao cũng hữu ích. ruby-matchit có thể phục vụ cùng một mục đích, nhưng tôi muốn làm nổi bật như được mô tả trong câu hỏi của tôi, nếu có thể. Khi tôi tìm hiểu thêm về Vim, tôi có thể điều tra xem liệu có thể thực hiện bản thân mình hay không. – pakeha

Trả lời

2

Có vẻ như plugin vim này không khớp paren: http://vimdoc.sourceforge.net/htmldoc/pi_paren.html bạn có thể tìm hiểu mã đó để xem cách mở rộng nó để khớp với những thứ khác.

+1

nó sẽ không hoạt động vì ': help matchpairs' nói: Hiện tại chỉ có các cặp ký tự byte đơn được phép, và chúng phải khác nhau. –

+0

Có, nó nói hiện tại ... nhưng mã sẽ đưa ra một ý tưởng làm thế nào để làm paren-phù hợp, và sau đó bạn có thể mở rộng nó để nó sẽ hỗ trợ cặp đa char có? Đó là một nơi để bắt đầu :) –

8

VIM (đến 7.2) không thể làm nổi bật cặp đóng 'if/end' vì cài đặt phù hợp chấp nhận một ký tự đơn (xem: help matchpairs). tôi khuyên bạn nên sử dụng gấp thay vào đó, với điều kiện là bạn thụt chính xác mã của bạn:

:set foldmethod=indent 

Sau đó sử dụng: zc, za để chắc chắn rằng bạn đang ở trong khối phải.

17

Nếu bạn đang sử dụng Vim 7.3, bạn nên có sẵn macro vim MatchIt.

Thêm runtime macros/matchit.vim vào tệp .vimrc của bạn và bạn sẽ có thể sử dụng% để khớp với khối ruby.

Bạn có thể xem plugin kiểu tệp để biết ruby ​​xem nó sẽ di chuyển giữa nó.

+0

Hoàn hảo! Nó hoạt động tốt hơn nhiều so với ': set foldmethod = indent' và' zc' +1 –

1

tôi thấy plugin này trong khi tìm kiếm câu trả lời trên cùng một vấn đề nó hoạt động cho mã ruby ​​cơ bản, nhưng tôi đã không kiểm tra nó ra cho RSpec, vv

Chỉ cần cài đặt nó thông qua pathogen và thêm let g:hl_matchit_enable_on_vim_startup = 1

https://github.com/vimtaku/hl_matchit.vim

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