2008-08-18 26 views
27

Gần đây tôi đã bắt đầu sử dụng Vim làm trình soạn thảo văn bản của mình và hiện đang làm việc với các tùy chỉnh của riêng tôi.Làm thế nào để tạo đoạn trích ngắn trong Vim?

Tôi cho rằng ánh xạ bàn phím có thể làm được khá nhiều thứ, nhưng trong thời gian này, tôi đang sử dụng chúng như một loại cơ sở trích đoạn gần như độc quyền.

Vì vậy, ví dụ, nếu tôi gõ def{TAB} (:imap def{TAB} def():<ESC>3ha), nó mở rộng tới:

def |(): # '|' represents the caret 

này làm việc như mong đợi, nhưng tôi cảm thấy bực bội khi Vim chờ một lệnh đầy đủ trong khi tôi đang gõ một từ có chứa "def" và không quan tâm đến việc mở rộng nó.

  • Có cách nào để tránh điều này hoặc sử dụng chức năng này hiệu quả hơn cho mục đích này không?
  • Có bất kỳ tính năng Vim nào khác phù hợp hơn với điều này không?

Sau khi tham gia một cái nhìn nhanh SnippetsEmu, có vẻ như đó là lựa chọn tốt nhất và dễ dàng hơn để tùy chỉnh hơn đầu, tôi nghĩ.

Tiếp tục với ví dụ trước:

:Snippet def <{}>(): 

Khi đã xác định, bạn có thể mở rộng đoạn mã của bạn bằng cách gõ def{TAB}.

+0

Có thể macro sẽ phù hợp hơn cho đoạn trích ngắn? –

Trả lời

5

SnippetsEmu là một plugin đoạn trích hữu ích.

+2

Câu trả lời chỉ liên kết của bạn gửi cho tôi một điều gì đó về CouchDB. Đây là lý do tại sao liên kết chỉ có câu trả lời là khủng khiếp. Phải thừa nhận rằng, bạn ít nhất là worded liên kết vì vậy tôi có thể ít nhất là tìm kiếm Google. Bạn nên thay đổi liên kết của mình thành liên kết chính thức, như OP/câu hỏi có. – James

4

Như đã lưu ý bởi MDCore, SnippetsEmu là một tập lệnh Vim phổ biến chỉ làm việc đó và hơn thế nữa. Nếu bạn chỉ cần mở rộng (không di chuyển lại dấu mũ), bạn có thể sử dụng lệnh :ab[breviate] tiêu chuẩn.

:ab[breviate] [<expr>] {lhs} {rhs} 
     add abbreviation for {lhs} to {rhs}. If {lhs} already 
     existed it is replaced with the new {rhs}. {rhs} may 
     contain spaces. 
     See |:map-<expr>| for the optional <expr> argument. 
6

Nếu SnippetsEmu quá nặng hoặc tham vọng cho những gì bạn cần (nó là dành cho tôi), tôi đã viết một plugin quản lý các đoạn dựa trên loại tệp. Nó thậm chí có hoàn thành tab khi chọn đoạn mã! :)

lấy nó ở đây: snippets.vim

34

Snipmate - như texmate :) http://www.vim.org/scripts/script.php?script_id=2540

video: http://vimeo.com/3535418

snippet def 
    """ ${1:docstring} """ 
    def ${2:name}: 
     return ${3:value} 
+0

Freaking awesome !!!! Kịch bản lớn voyeg3r. Chính xác những gì tôi đang tìm kiếm. – Daniel

+1

cả XPTemplate và UltiSnips là một cải tiến so với snipMate – user1825480

+1

Snipmate có một ngã ba cập nhật tại https://github.com/garbas/vim-snipmate và sử dụng một repo của đoạn tại https://github.com/honza/snipmate-snippet – caspyin

5

Tôi chỉ cần cài đặt UltiSnips. Có một bài viết hay giải thích tại sao bạn có thể chọn UltiSnips: Why UltiSnips?

Tôi chưa sử dụng bất kỳ plugin đoạn mã nào khác; Tôi đã quyết định làm việc với một người có vẻ đầy đủ tính năng và có thể tiếp nhận tôi khi tôi có thêm nhiều kỹ năng Vim và muốn làm những điều phức tạp hơn.

+0

Tôi đã thử cả Snipmate và UltiSnips và không nghi ngờ gì nữa UltiSnips là tốt hơn nhiều, bởi vì đơn giản hơn để thực hiện thay đổi và tạo đoạn trích. – SergioAraujo

7

Như gợi ý khác (mặc dù hơi khác nhau) sử dụng vim được xây dựng trong chức năng:

:iabbrev def def(): #<LEFT><LEFT><LEFT><LEFT><LEFT> 

Bây giờ bất cứ khi nào bạn gõ def theo sau là một không gian hoặc ký tự không nói cách khác, nó sẽ mở rộng ra giống như những gì bạn đã cho là đầu ra của SnippetsEmu (không gian đến từ không gian bạn đã nhập để kích hoạt hoàn thành).

Cách tiếp cận này không gặp phải sự cố "trễ" mà bạn gặp phải khi sử dụng: inoremap và được xây dựng trong vim. Để biết thêm thông tin về tính năng này, hãy xem :help abbrev.

Bạn có thể lo ngại rằng được kích hoạt bởi không gian không phải tab nó sẽ kích hoạt không cần thiết, nhưng nói chung là khá thông minh về thời điểm kích hoạt nó. Vấn đề này có thể được giảm nhẹ bằng cách cho phép bổ sung các chữ viết tắt chỉ dành cho một số định dạng tập tin (ví dụ, python):

au filetype python :iabbrev ... etc 

Snip [ETS] (Quản lý | Emu | Mate | .vim) là tất nhiên cũng là một giải pháp hoàn hảo , nhưng nó là tốt đẹp để được nhận thức của các lựa chọn thay thế (đặc biệt là khi chúng được xây dựng trong).

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