Làm thế nào Vim có thể giúp tôi nhớ dấu phẩy trong các tệp BibTeX?


11

Tôi chỉnh sửa khá nhiều tệp BibTeX và tôi thường xuyên quên dấu phẩy:

Ví dụ:

@Book{cooke2015british,
 author = {Cooke, Lez},
 title = {British Television Drama},
 publisher = {Palgrave on behalf of the British Film Institute},
 year = {2015},
 keywords = {about}
 address = {London},
 isbn = {978-1844576234}
 }

Bạn sẽ thấy rằng tôi đã quên thêm dấu phẩy sau keywords = {about}đó, điều đó có nghĩa là tôi phải dành thời gian để gỡ lỗi. Có cách nào Vim có thể khiến tôi nhớ không? Nhân tiện, tôi có plugin bib_autocomp.vim ...


Không phải tôi biết, nhưng bạn có thể thử một cái gì đó như thế này để sửa nó : :%s/[^ ,]\zs\ze\n\s*[^ }]/,/.
Sato Katsura

Câu trả lời:


6

Giải pháp nhanh và bẩn:

:match Error /^\s\+.*,\@<!\ze\n\s\+\w/

Bạn cũng có thể tạo một cú pháp đặc biệt cho các tệp BibTeX bằng cách sử dụng cùng một mẫu.

Một số giải thích về biểu thức chính quy được sử dụng:

  1. ^\s\+ tìm kiếm các từ khóa thụt lề.
  2. \ze dừng khớp mẫu sao cho dòng tiếp theo không được đánh dấu.
  3. ,\@<!\n tìm kiếm các dòng không kết thúc bằng dấu phẩy.
  4. \n\s\+\w đảm bảo rằng có một mục mới sau khi hiện đang được quét.

Mẫu tương tự có thể được sử dụng để nhảy giữa các dòng sai bằng cách sử dụng vimgrepnhư sau:

:vimgrep /^\s\+.*,\@<!\ze\n\s\+\w/ %

Nếu cửa sổ quickfix không tự động mở, nó có thể được mở bằng :copen. Và :cnext:cpreviouscó thể được sử dụng để nhảy giữa các lỗi.


Điều này là tốt! Tôi có thể bằng cách nào đó làm cho nó nhảy sang lỗi tiếp theo khi tôi nhấn n không?
Kristian Nordestgaard

Tôi đã cập nhật câu trả lời để bao gồm những gì bạn yêu cầu. Xem nếu nó làm việc cho bạn.
Vitor

0

Một khả năng là xác định một .vimrcphím tắt để thêm thiếu,

Thí dụ:

:map \q  :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/<CR>

và sử dụng \qtrước khi rời khỏi hoặc khi gỡ lỗi.


Không làm việc cho tôi? Tôi nhận được E10: \ should be followed by /, ? or & 24,1 60%, nhưng có lẽ tôi đang làm sai?
Kristian Nordestgaard

@KristianNordestgaard, trong .vimrcchúng tôi phải xóa ":" ban đầu. Hãy thửmap \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
JJoao
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.