Làm nổi bật vim tùy chỉnh


12

Tôi đang chỉnh sửa một số xml ngay bây giờ và tôi đã để lại cho mình một số nhận xét về những điều cần quay lại. Như thế này

<!-- Question: bla bla -->

Tôi đang chỉnh sửa với vim ngay bây giờ và tôi muốn vim làm nổi bật Câu hỏi ngay bây giờ để tôi có thể dễ dàng xem qua mã của mình và tìm tất cả các địa điểm tôi cần xem. Tôi biết tôi cần thêm một cái gì đó vào vimrc của mình nhưng tôi nghĩ rằng tôi có thể đang tìm kiếm thứ sai.

Cập nhật

Tôi đã thử đặt cái này vào .vimrcnhưng nó không có tác dụng:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

Cập nhật 2

Trên thực tế tôi có thể thấy rằng những gì tôi đã làm trước đây có một số hiệu quả bởi vì khi tôi làm điều này:

:hi

Nó cho tôi thấy tất cả những điều mà nó đang làm nổi bật và một trong những mục là:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

( và xxx được định dạng chính xác )

Điều này dẫn đến tôi tin rằng tôi chỉ không xác định đúng Câu hỏi. Câu hỏi có cần phải nằm trên một dòng không?

Cập nhật 3

Ok để bài viết của người dùng 22303 tôi có tác dụng này:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/

Tuy nhiên tôi nghi ngờ rằng bạn chỉ được phép có một trận đấu cho mỗi tệp. Bởi vì khi tôi làm điều này:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/
highlight MyRelook cterm=bold term=bold ctermbg=blue ctermfg=black
match MyRelook /Another look/

Cái đầu tiên ngừng hoạt động. (Nhưng cái thứ hai hoạt động).

Câu trả lời:


9

Tôi nghĩ rằng chúng tôi đã cho bạn ăn một số câu trả lời không đúng lắm. Đây là một cái gì đó để thử mà tôi đã thử nghiệm trên máy của mình.

Đầu tiên, tạo nhóm nổi bật mới của riêng bạn:

:highlight MyQuestions guifg=red guibg=green

Bây giờ, xác định rằng nhóm tô sáng sẽ tồn tại bất cứ khi nào một mẫu được khớp:

:syntax match MyQuestions /Question/

Điều đó sẽ bắt đầu hiển thị phần nổi bật của văn bản 'Câu hỏi' trên mỗi dòng có văn bản đó. Để mở rộng để hiển thị toàn bộ dòng, bạn sẽ thay đổi văn bản tìm kiếm để có các ký tự đại diện khớp với toàn bộ dòng, đại loại như thế này:

:syntax match MyQuestions /.*Question.*/


Trên thực tế, điều đó chỉ có tác dụng ... Tôi nghi ngờ rằng bạn chỉ được phép có một trận đấu tại một thời điểm, xem bản cập nhật # 3 ...
sixty feetersdude

1
@sixtyfootersdude: Xin lỗi, một lần nữa đã xảy ra lỗi nhỏ. Thay vào đó, tất cả các lệnh khớp phải là các lệnh "khớp cú pháp". Vì vậy, thay vì [: khớp MyQuestions /.*Question.*/] bạn sẽ muốn sử dụng [: cú pháp khớp với MyQuestions /.*Question.*/]. Điều đó cho phép bạn có nhiều trận đấu khác nhau như bạn muốn. Thực tế đây là một trong những loại lệnh phổ biến nhất được đặt trong các tệp cú pháp. Nhưng bạn có thể thực thi chúng ở bất cứ đâu bạn muốn, dòng lệnh, vimrc hoặc bất kỳ tập lệnh nào khác.
dùng22303

Thêm syntaxvào đằng trước match...trong vimrc tập tin làm cho tôi phù hợp không có hiệu lực ở tất cả. Đây có phải là nơi tôi nên làm điều này. Làm nó với một tập tin mở cũng không có hiệu lực.
Sixty feetersdude

1
@sixtyfooters: Không chắc chắn điều gì đang xảy ra với bạn, nhưng đó chắc chắn là cách để làm điều đó. Kiểm tra tại dòng lệnh trước khi đặt tập lệnh (có thể cài đặt cú pháp có thể bị xóa ở đâu đó trong các tập lệnh khác được tải cho tệp của bạn). Sau khi được xác định, hãy kiểm tra những nhóm tồn tại và những điểm nổi bật mà chúng có bằng cách đưa ra lệnh ": highlight" trần trụi (hoặc chọn "Cú pháp", "Kiểm tra đánh dấu" từ menu gui trong gvim). Hãy nhớ rằng bạn muốn sử dụng lệnh tô sáng trước để tạo nhóm, sau đó sử dụng 'khớp cú pháp' để đặt mẫu khớp.
dùng22303

@sixtyfooters: Tôi giả sử bạn đang chạy vim trong một thiết bị đầu cuối (nghĩa là không phải gvim) để cài đặt các thuộc tính thuật ngữ chỉ hoạt động. Tôi nghe có vẻ như các lệnh cú pháp đang bị xóa khi một tệp mới được tải và một tệp cú pháp liên quan đang chạy và xóa tất cả các lệnh cú pháp trước đó. Vì vậy, chỉ cần kiểm tra kỹ, khi sử dụng dòng lệnh bạn có nhập lại các lệnh này mỗi khi bạn tải một tệp không? Tôi nghĩ rằng bạn có thể thử kiểm tra văn bản trong bộ đệm mới thậm chí chưa được lưu và thậm chí chưa có tên tệp được gán.
dùng22303

5

Tệp bạn đang tìm là tệp 'cú pháp'. Hãy thử nhìn vào /usr/local/share/vim/syntax/hoặc /usr/share/vim/syntax/. Tệp bạn muốn là xml.vim.

Điều đơn giản nhất để làm là tìm dòng có

syn keyword xmlTodo         contained TODO FIXME XXX

và thay đổi nó thành:

syn keyword xmlTodo         contained TODO FIXME XXX Question

Điều này sẽ thêm phần nổi bật 'Todo' vào bất kỳ bình luận nào có chứa văn bản Question.

Nếu bạn định sử dụng cái này cho (bao giờ), tốt nhất là sao chép xml.vim vào cục bộ của bạn ~/.vim/syntaxđể thay đổi thành vim sẽ không ghi đè lên tệp cú pháp tùy chỉnh của bạn.

Cập nhật

Nếu bạn muốn có khả năng (sortof) tương tự trong bất kỳ tệp nào , tôi sẽ sử dụng lệnh 'goto'. Tôi sẽ thừa nhận rằng điều này giống như hlsearch, điều mà bạn nói làm phiền bạn.

Trong khi chỉnh sửa, khi con trỏ ở trên một từ, hãy nhập gdđể tìm kiếm từ điểm hiện tại trong tệp hoặc gDđể tìm kiếm từ đầu. Mỗi từ trong tệp của bạn phù hợp với từ hiện tại được tô sáng. Bạn có thể gõ nđể chuyển sang phiên bản tiếp theo của từ đó.

Tôi có xu hướng làm điều này, bởi vì bạn có được sự nổi bật và điều hướng với cách gõ tối thiểu. Bạn tắt phần tô sáng theo cách thông thường::noh[lsearch]


Ồ Nghe có vẻ như những gì tôi muốn làm. Hiện tại tôi không có cú ~/.vim/ folder. If I created it and create the file pháp. Tôi có cần tham khảo nó ở đâu đó (có thể trong .vimrc?) để nói với vim sử dụng nó không?
Sixty feetersdude

1
Không. Vim tự động tìm kiếm nó (và một vài thư mục khác - ví dụ: plugin, màu sắc, trình biên dịch) và nếu một tệp cú pháp tồn tại trong khu vực nhà của bạn, nó sẽ được ưu tiên mặc định của hệ thống.
DaveParillo

1
Ngoài ra, để rõ ràng, bạn muốn tạo một thư mục syntax và đặt vào đó một tệp có tênxml.vim
DaveParillo

Tôi có nên đặt .vimrc của mình vào thư mục .vim không?
Sixty feetersdude

1
tập tin cú pháp đi trong thư mục .vim của bạn. Cú pháp nổi bật được dự định là ngôn ngữ cụ thể. Nếu bạn muốn có khả năng (sortof) tương tự trong bất kỳ tệp nào , tôi sẽ sử dụng lệnh 'goto'. Tôi sẽ thêm nó vào câu trả lời của tôi.
DaveParillo

2

Bạn chỉ có thể làm

:set hlsearch

Và sau đó tìm kiếm Câu hỏi


Đó là những gì tôi đã làm nhưng hlsearch làm phiền tôi. +1, cảm ơn vì lời đề nghị.
Sixty feetersdude

2

Bạn có một vài lựa chọn.
- một, như Dominik đã đề cập ... bạn có thể tìm kiếm từng cái một (không thực tế)
- hai, bạn có thể làm ": g / <- Câu hỏi" để có được một "danh sách" tất cả chúng (tốt hơn một chút , đưa ra một bức tranh tổng thể)
- ba, bạn có thể thiết lập một nhóm đánh dấu nếu bạn chỉ sử dụng những loại bình luận đó trong các tệp xml (Tôi không biết xml trông như thế nào, vì vậy tôi không biết nếu có một số loại ý kiến ​​khác trong họ là tốt). Điều này sẽ tốt nếu bạn giải quyết nó trong vimrc, vì khi bạn làm mới vim với phiên bản mới hơn, tệp xlm.vim của bạn sẽ biến mất.


+1 Tôi thích :g/đề xuất này, nhưng có thể khó áp dụng nếu 'Câu hỏi' không ngay lập tức theo thẻ nhận xét.
DaveParillo

@DaveParillo - à, vâng. tốt, như tôi đã nói, tôi không biết gì về xml nên tôi cho rằng nó luôn như vậy.
Rook

Làm thế nào tôi có thể thiết lập một nhóm nổi bật?
Sixty feetersdude

1
@sixtyfootersdude - xem ": giúp e410".
Rook

@Idigas: cảm ơn đã tham khảo. Có một cái nhìn nhưng vẫn không thể giải quyết vấn đề của tôi. Tôi đã thêm một bản cập nhật trong câu hỏi. Cảm ơn.
Sixty feetersdude

1

Bạn không nhất thiết phải đặt lệnh trong vimrc của mình. Bạn luôn có thể nhập nó vào dòng lệnh và sau đó xóa nó khi bạn không muốn tô sáng nữa. Các lệnh sẽ giống như thế này:

: hi Câu hỏi guifg = guibg đỏ = xanh gui = đậm

Trong gvim (nghĩa là vim với một gui) sẽ đặt tiền cảnh (guifg), nền và cài đặt ký tự chung.

nếu bạn muốn thoát khỏi điều đó, hãy làm điều này:

: hi Câu hỏi rõ ràng

Sử dụng vim bên trong một thiết bị đầu cuối, bạn có thể sửa đổi để sử dụng lệnh này:

: hi Câu hỏi ctermfg = red ctermbg = blue hạn = bold

Tất nhiên bạn có thể đặt bất kỳ thứ nào trong vimrc của mình và bạn cũng có thể kết hợp các cờ gui và các thuật ngữ thành một lệnh hi duy nhất.


[bên dưới được thêm vào sau khi tôi đọc câu trả lời của người đăng khác]

Xin lỗi, tôi đã giả sử rằng cú pháp của các dòng câu hỏi của bạn đã khớp với cài đặt của tệp cú pháp của bạn cho thẻ đánh dấu 'Câu hỏi' tích hợp của Vim. Chỉ cần nhìn vào câu trả lời khác đề cập đến tệp cú pháp xml cho vim và sau đó bạn có thể đưa ra các lệnh ở trên bằng cách sử dụng nhóm tô sáng ToDo thay vì Câu hỏi.


Đã thử: hi Câu hỏi ctermfg = red ctermbg = blue hạn = bold nhưng không có hiệu lực.
Sixty feetersdude

Xin lỗi, lệnh: hi chỉ được thiết lập làm thế nào nhóm Câu hỏi sẽ được tô sáng. Bây giờ bạn phải xác định các khu vực tài liệu là một phần của nhóm Câu hỏi. Bạn có thể thực hiện việc này bằng lệnh khớp :: Câu hỏi khớp / [mẫu tìm kiếm] / hoặc, trong trường hợp của bạn :: Câu hỏi khớp / Câu hỏi /
user22303

0

Tôi đến bữa tiệc muộn nhưng tôi sử dụng TODOFIXMEchính xác là trong tình huống này.

Hầu hết, nếu không phải tất cả, TODOmàu sắc sẽ làm nổi bật trong ví dụ sau với một số kết hợp màu nền, gạch chân và in nghiêng:

<tree>
  <!--TODO : do I have to add a trunk tag ?-->
  <branch>
    <leaf>caterpillar</leaf>
    <leaf>caterpillar</leaf>
  </branch>
</tree>

Nó không thực sự phù hợp về mặt ngữ nghĩa nhưng nó hoạt động rất tốt từ quan điểm hoàn toàn chức năng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.