2009-09-23 22 views
18

Tôi đến Vim từ TextMate và tôi muốn tùy chỉnh màu sắc vim của tôi. Sẽ rất hữu ích nếu tôi có thể tìm ra (các) nhóm nổi bật nào có bất kỳ từ hoặc biểu tượng cụ thể nào thuộc về. Trong TextMate, tôi sẽ đặt dấu nháy vào chữ/biểu tượng trong câu hỏi, sau đó nhấn ctrl-shift-p và một mẹo công cụ sẽ xuất hiện nói điều gì đó như:Tìm hiểu nhóm từ khóa/biểu tượng cụ thể nào thuộc vim

text.html.basic 
meta.tag.structure.any.html 
string.quoted.double.html

Từ thông tin này, nó thực sự đơn giản để chỉnh sửa một chủ đề màu TextMate để áp dụng (hoặc loại bỏ) định dạng cho văn bản được đề cập.

Trong Vim, nếu tôi muốn thay đổi định dạng cho một từ hoặc biểu tượng nhất định, tôi không chắc bắt đầu từ đâu. Có điều gì tương đương với ctrl-shift-p của TextMate không?

Trả lời

22

Tôi không chắc mình đã hiểu đúng chưa, nhưng bạn đang tìm kiếm điều này?

" adds to statusline 
set laststatus=2 
set statusline+=%{synIDattr(synID(line('.'),col('.'),1),'name')} 

" a little more informative version of the above 
nmap <Leader>sI :call <SID>SynStack()<CR> 

function! <SID>SynStack() 
    if !exists("*synstack") 
     return 
    endif 
    echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') 
endfunc 
+0

Phát hiện - cảm ơn! – nelstrom

+0

Tôi vừa thực hiện một thay đổi: ánh xạ lệnh tới ctrl-shift-p để đảm bảo tính nhất quán. 'nmap : gọi SynStack() ' – nelstrom

3

CẬP NHẬT: Từ :help synID() (xem ví dụ):

 
synID({line}, {col}, {trans})       *synID()* 
       The result is a Number, which is the syntax ID at the position 
       {line} and {col} in the current window. 
       The syntax ID can be used with |synIDattr()| and 
       |synIDtrans()| to obtain syntax information about text. 
       {col} is 1 for the leftmost column, {line} is 1 for the first 
       line. 
       When {trans} is non-zero, transparent items are reduced to the 
       item that they reveal. This is useful when wanting to know 
       the effective color. When {trans} is zero, the transparent 
       item is returned. This is useful when wanting to know which 
       syntax item is effective (e.g. inside parens). 
       Warning: This function can be very slow. Best speed is 
       obtained by going through the file in forward direction. 

       Example (echoes the name of the syntax item under the cursor): 
         :echo synIDattr(synID(line("."), col("."), 1), "name") 

Theo như tôi biết, tốt nhất bạn có thể làm là :syntax, mà sẽ cung cấp cho bạn một danh sách của tất cả các cú pháp nạp cho tệp hiện tại. Tôi không biết bất cứ điều gì sẽ cho phép phân tích cú pháp cú pháp của bộ đệm hiện tại.

Lưu ý rằng :syntax chỉ xác định các mục cú pháp, nó sử dụng lệnh :highlight cung cấp màu cho mục cú pháp.

Khi bạn đã quyết định những thay đổi bạn muốn thực hiện, hãy đặt chúng trong ~/.vim/after/syntax/<filetype>.vim. Những điều này sẽ áp dụng các thay đổi của bạn sau khi các tệp cú pháp mặc định được tải.

+0

Tài liệu trợ giúp cho Vim là xuất sắc, nhưng tôi không thể tìm thấy thông tin trên đồng bộ hóa mà không có sự trợ giúp của bạn. Cảm ơn. Ngoài ra, mẹo về việc ghi đè các tệp cú pháp bằng cách đặt chúng trong thư mục 'sau' được đánh giá cao. – nelstrom

+0

@nelstrom - bằng cách "giúp vimfiles", bạn có thể xem thư mục nào có tùy chọn trên đó (phần sau). – Rook

+0

@nelstrom - một cách nhanh chóng để xem chủ đề trợ giúp có liên quan là sử dụng phím tắt CTRL-D để xem các hoàn thành có thể có khi nhập ': help syn' - nó sẽ hiển thị cho bạn tất cả các chủ đề trợ giúp phù hợp với chuỗi" syn ", đó là cách tôi tìm thấy' synID() '. – rampion

12

Một cách khác để nhận được rất nhiều thông tin về làm nổi bật:

map <F3> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" . " FG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"fg#")<CR> 

Nếu tôi chuyển qua nhận xét trong một file C và nhấn F3, tôi nhận được:

hi<cCommentStart> trans<cCommentStart> lo<Comment> FG:#00ff00 

cho thấy rằng nó nằm trong nhóm đánh dấu cCommentStart, được liên kết với Comment và được tô màu xanh lá cây ()). Đây là (sửa đổi) từ here, xem trang đó để biết thêm thông tin.

+0

Điều này thật tuyệt vời. Tôi thấy điều này hữu ích hơn nhiều so với định danh 'hi' đơn giản. – mybuddymichael

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