2012-10-16 32 views
6

Đây là một chức năng người dùng định nghĩa đơn giản:Cách phân biệt giữa dòng địa chỉ và phạm vi dòng trong vim?

fun! Foo() range 
    echo a:firstline a:lastline 
endfun 
  • :5call Foo():5,5call Foo() cho tôi kết quả tương tự. Tuy nhiên, :5j:5,5j cho tôi các kết quả khác nhau.

Tôi có thể viết chức năng hoạt động như join không?
Làm thế nào để join phân biệt giữa địa chỉ dòng và phạm vi dòng?

Trả lời

4

Bằng cách xác định :command tùy chỉnh, thuộc tính -range-count cho phép bạn kiểm soát tốt hơn mức độ được sử dụng. Tuy nhiên, tôi nghĩ rằng ngay cả điều đó cũng không cho phép bạn sao chép chính xác hành vi của :join. Giao diện cho các lệnh Vim tùy chỉnh không phong phú như những gì có sẵn cho các lệnh dựng sẵn. Để giải quyết sự cố này, bạn có thể sử dụng histget('cmd', -1) để nhận dòng lệnh gọi lệnh của bạn và phân tích cú pháp lệnh chính xác, bao gồm phạm vi ban đầu (sau đó có thể được sử dụng lại bằng cách chuyển nó sang lệnh khác, nhưng làm số học đường với nó là vấn đề, vì nó là phạm vi thô, không phải là số dòng thực tế). Cách giải quyết sẽ chỉ hoạt động cho các lệnh tương tác, dễ vỡ và đòi hỏi một số nỗ lực. Có lẽ bạn có thể tránh hoàn toàn vấn đề bằng cách xác định hai lệnh khác nhau thay thế.

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