Bạn sử dụng tính năng Quickfix của vim như thế nào?


125

Tôi là một người dùng Vim khá mới và tôi thấy rằng đường cong học tập của nó khá dốc (ít nhất là đối với tôi). Tôi vừa cài đặt tập lệnh vim này để kiểm tra lỗi JavaScriptLint, nó hiển thị lỗi trong cửa sổ Quickfix của vim sau khi tôi lưu bộ đệm.

Tuy nhiên, tôi không biết phải làm gì tiếp theo .. Làm cách nào để 'cuộn' qua tất cả các lỗi? Làm cách nào để đóng 'cửa sổ' Quickfix? Làm cách nào để kiểm tra lỗi sau khi tôi thực hiện các thay đổi đối với mã của mình?

Tôi đã xem các tài liệu Quickfix của vim nhưng số lượng lệnh quá tải và tôi dường như không thể tìm thấy những gì mình muốn. Bất kỳ trợ giúp sẽ được đánh giá cao.

Một câu hỏi phụ: có cách nào để kiểm tra javascriptlint cho lỗi js đối với mã nằm trong tệp .html không?

Cảm ơn!

Câu trả lời:


148

Có rất nhiều lệnh cho quickfix như bạn đã nói, nhưng tôi có xu hướng thấy rằng tôi chỉ sử dụng một tập hợp con nhỏ trong số đó:

:copen " Open the quickfix window
:ccl   " Close it
:cw    " Open it if there are "errors", close it otherwise (some people prefer this)
:cn    " Go to the next error in the window
:cp    " Go to the previous error in the window
:cnf   " Go to the first error in the next file
:.cc   " Go to error under cursor (if cursor is in quickfix window)

Tôi có xu hướng sử dụng điều này với :make:vimgrep, vì vậy tôi không thể nhận xét về trình kiểm tra vải Javascript, nhưng điều này sẽ cung cấp cho bạn một cái gì đó để bắt đầu.

Về cách sử dụng chung của JavascriptLint, tôi không phải là một lập trình viên javascript, nhưng có vẻ như script hiển thị một hàm gọi là "JavascriptLint", vì vậy nếu bạn muốn gọi nó theo cách thủ công, bạn có thể sử dụng :call JavascriptLint(). Tuy nhiên, nó hoạt động trên bản sao đĩa của tệp, vì vậy nó sẽ phải được lưu trước. Nếu (và chỉ khi) dòng lệnh jslhoạt động trên các tệp html, bạn sẽ có thể sử dụng :call JavascriptLint()trên tệp html để kiểm tra javascript bên trong. Bạn cũng có thể làm:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

để tự động hóa nó. Nếu jslkhông hỗ trợ các tệp html, thì (thiếu bản vá ứng dụng hoặc yêu cầu tác giả thay đổi nó), đó có thể là một nguyên nhân mất ...


Cảm ơn, những lệnh đó là một khởi đầu tốt, tôi sẽ chỉ phải chơi xung quanh một chút và làm quen với cách nó hoạt động. Nếu tôi sử dụng: cn để đi đến một lỗi trong cửa sổ qf, tôi có thể chuyển đến cửa sổ với mã của mình mà không thoát khỏi cửa sổ qf không? Nó có thể nhảy đến dòng bị lỗi không? Và gợi ý của bạn về việc sử dụng: call hoạt động, tuy nhiên nó đi theo các liên kết <script src> mà không phải là những gì tôi muốn.
hora

@hora: :cnkhông nên đóng cửa sổ qf mà nó sẽ chuyển sang cửa sổ chứa lỗi: đây có phải ý bạn là "jump" không? Bạn có thể nhanh chóng chuyển lại bằng Ctrl-W phoặc :wincmd p, vì vậy bạn có thể làm :command! CN :cn | wincmd p<CR>hoặc tương tự như vậy (chưa được kiểm tra). Điều này sẽ cung cấp cho bạn một :CNlệnh chuyển đến lỗi tiếp theo mà không cần chuyển ra khỏi cửa sổ Quickfix. Ngoài ra, bạn có thể làm điều gì đó như :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(một lần nữa chưa được kiểm tra) và sử dụng Enter để chọn lỗi mà không cần chuyển ra khỏi cửa sổ Quickfix.
DrAl

1
Đối với người mới bắt đầu, "Bạn cũng có thể làm: 'somecodehere' để tự động hóa nó" không có nhiều ý nghĩa. Có nghĩa là dòng mã hiển thị phải được đặt trong ~ / .vimrc (_VIMRC trên windows AFAIK) và từ lần bắt đầu tiếp theo của VIM mỗi khi tệp được lưu, lệnh này sẽ được gọi. Đúng?
Беров

63

Cách đơn giản nhất để di chuyển danh sách QuickFix (hoặc danh sách địa điểm, cho rằng vấn đề) là các unimpairedPlugin .

Sau khi cửa sổ Quickfix được điền [q]qđi tới và quay lại (tương ứng) trong danh sách Quickfix. [Q]Qđi đến đầu và cuối (điều này đặc biệt hữu ích nếu bạn chỉ có một mục trong danh sách; điều này khiến vim phàn nàn về [q]q). Vì vậy, quy trình làm việc là:

  1. Chạy bất kỳ lệnh nào trong danh sách Quickfix
  2. Nhập [Qđể chuyển đến mục đầu tiên
  3. Cuộn qua các mục tiếp theo (nếu có) với [q]q

Nếu bạn đang sử dụng Syntastic, bạn sẽ nhận được danh sách vị trí thay vì danh sách Quickfix. Không vấn đề gì; chỉ sử dụng [L, ]L, [l, và ]ltrong cùng một cách.

unimpairedcó vô số ánh xạ tiện dụng khác - [e]ecác dòng "bong bóng" lên và xuống, [<Space>]<Space>chèn các dòng trống ở trên và bên dưới, v.v. Tôi ngạc nhiên là không ai đề cập đến nó ở đây trước đây; đó có thể là bởi vì nó đã không tồn tại cho đến tháng 1 năm 2010, mặc dù câu hỏi đã được đặt ra vào năm 2009.


27

Đặt hai dòng sau vào tệp .vimrc của bạn:

map <C-j> :cn<CR>
map <C-k> :cp<CR>

Bây giờ bạn có thể điều hướng qua các lỗi bằng cách sử dụng ctrl-j và ctrl-k, bắt chước lệnh chuyển động lên và xuống tiêu chuẩn j và k.


1
<c-j>đôi khi (phụ thuộc vào thiết bị đầu cuối ?!) bị lỗi hoặc hoàn toàn không hoạt động, vì nó có nghĩa giống như <NL> // ist dễ sử dụng nhất <c-n><c-p>thay vào đó // ngược lại: stackoverflow.com/questions/8304421/…
eli

Tôi quyết định sử dụng F8 và F9, như thế này: noremap <F7> :cprevious<CR>noremap <F8> :cnext<CR>trong.vimrc
Flimm

Tôi đã sử dụng <C-j><C-k>điều hướng giữa các ngăn chia vim và ngăn tmux bằng trình điều hướng vim tmux . Sự kết hợp <C-M-j><C-M-k>có thể là một sự thay thế.
Paul Rougieux

24

Bạn cũng có thể sử dụng :cc 2(hoặc bất kỳ số nào khác) để chuyển đến, trong trường hợp này là lỗi thứ hai trong cửa sổ Quickfix. Điều hướng bằng :cn, :cc 4v.v. sẽ đặt con trỏ vào dòng được đề cập.


8

Cách thực hành tốt nhất để tích hợp kiểm tra cú pháp JavaScript là sử dụng plugin Syntastic Vim , đang sử dụng danh sách vị trí của Vim (song song với nhanh chóng ).

Tôi đã viết câu trả lời cho câu hỏi nàycâu hỏi này giải thích cách thực hiện nó, cùng với cách tải duyệt mã nguồn / danh sách thẻ cho Vim bằng cách sử dụng jshint.com do cộng đồng điều khiển (tốt hơn JSLint IMO) và DoctorJS của Mozilla (trước đây là jsctags ).


8

Có thể tùy chọn này không tồn tại khi câu hỏi này được viết (hoặc có thể tôi đang xấu hổ vì có điều gì đó trong tôi .vimrckhiến điều này xảy ra) nhưng khi tôi nhận được Quickfix List, tôi chỉ cần điều hướng nó bằng jksau đó nhấn <CR>(tức là phím Enter) để chuyển đến vị trí đó trong tệp.

Sau đó, để quay lại Quickfix Listtôi gõ Ctrl+ W jcho "di chuyển xuống cửa sổ" và tôi đã quay lại.

Cuối cùng, khi tôi hoàn tất, tôi chỉ cần gõ :q, giống như tôi sẽ đóng bất kỳ cửa sổ bình thường nào.


Đó là những gì tôi muốn làm, nhưng tôi nhận được thông báo "Không thể thực hiện thay đổi," có thể sửa đổi "đang tắt".
rtf

1
Có thể bạn đã sử dụng quá nhiều phím Enter. Tôi đã lấy ví dụ nmap <CR> o<Esc>, vì vậy tôi có thể thêm dòng mới ở chế độ bình thường.
Taavi Ilves

6

cửa sổ quickfix được vận hành hầu như giống như bất kỳ cửa sổ vim nào khác: j xuống dòng, k lên dòng,: cn để chuyển đến lỗi / cảnh báo tiếp theo, v.v.

thí nghiệm!


1
+1 cho thử nghiệm, đó là cách tôi học được khá nhiều thứ.
hora

4

Ngoài câu trả lời tuyệt vời của @DrAl về cách mở và đóng cửa sổ nhanh và điều hướng giữa các mục nhập, tôi đã tạo một hình ảnh để hiển thị một số lệnh điều hướng sửa lỗi nhanh khác.

Mỗi nhóm gồm 3 tệp dưới đây đại diện cho một tập hợp các kết quả nhanh, ví dụ từ vimgrep. cnewer và colder là để vượt qua các tập kết quả lịch sử. nhập mô tả hình ảnh ở đây

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.