dòng lệnh vi, dòng goto và cột


17

Tôi đã trộn lẫn việc sử dụng emacsvi( vim) trong một thời gian dài. Mỗi người trong số họ có lợi thế của nó. Tôi phân tích đầu ra lỗi từ quá trình biên dịch như quá trình và nhận số dòng và số cột nhưng tôi chỉ có thể sử dụng emacsđể trực tiếp đi đến một dòng và cột:

emacs +15:25 myfile.xml

với vitôi chỉ có số dòng (theo trang man)

vi +15 myfile.xml

Có một tùy chọn để đi con trỏ vị trí trên một mẫu ( vi +/pattern myfile.xml) mà tôi không bao giờ phải làm việc. Nhưng điều đó sẽ không giúp tôi vì mẫu không phải luôn luôn xuất hiện đầu tiên trong tệp.

Làm thế nào tôi có thể bắt đầu viđể nó đi đến cột 25 trên dòng 15 của tệp của tôi? Tôi có thể làm một cái gì đó với -ctùy chọn?


3
Kể từ khi bạn gắn thẻ vim, có bạn coi là quickfixhệ thống, chạy trình biên dịch từ bên trong vim, phân tích đầu ra lỗi, populates một danh sách các lỗi (điều hướng với :cp, :cn, :cllệnh), và vị trí con trỏ của bạn ở người đầu tiên?
Random832

Nếu bạn mở một tệp bằng vi và nhập :15nó sẽ nhảy đến dòng 15 .. Hy vọng điều này sẽ giúp bạn
mã ninja

Câu trả lời:


17

Bạn có thể dùng:

vi '+normal 15G25|'  myfile.xml

2
giải thích: hầu hết các lệnh (nghĩa là hầu hết các chữ cái) trong vi có thể được đi trước bởi một số (hoặc phạm vi) để thay đổi hành vi mặc định của nó hoặc lặp lại nó (hoặc áp dụng nó trên một phạm vi cụ thể). Bên trong vi, trong chế độ lệnh, bạn có thể thực hiện 15Gđể đi đến dòng 15 và 25|đến col 25. Và Christa chỉ cho bạn cách làm tương tự từ dòng lệnh.
Olivier Dulac

7

Với plugin dòng tệp , bạn có thể chỉ cần nối thêm dòng và cột vào tên tệp, cả khi gọi Vim và bên trong bằng các lệnh như :edit:

vim myfile.xml:15:25

Thật tốt khi biết điều này tồn tại, nhưng tôi nghĩ rằng tôi sẽ sử dụng một câu trả lời không yêu cầu plugin bổ sung
Dominique

@Dominique Bạn cũng có thể vim myfile.xml +15cho hàng mà không cần plugin, nhưng không phải là cột theo như tôi biết
Izkata

5

chỉ để giải trí thôi -c 'normal 14j24l', sẽ đưa bạn lên hàng 15 ký tự 25


4

Tôi không biết về -ctùy chọn này, nhưng bạn sẽ có thể làm:

vi '+cal cursor(15,25)' myfile.xml

(hãy chắc chắn rằng bạn trích dẫn vì dấu ngoặc đơn ())


cursor()sử dụng chỉ số byte cho cột, nhưng nó thường là số ký tự.
Ingo Karkat

@IngoKarkat Điều đó có thực sự quan trọng không? Văn bản là UTF-8.
Dominique

2
Nó quan trọng đối với các ký tự không phải ASCII, được biểu thị bằng nhiều hơn một byte. Ngoài ra, một Tab và các ký tự điều khiển thường chiếm nhiều hơn một cột hiển thị.
Ingo Karkat

2

Đáng chú ý:

-c command 

Chạy lệnh ex đã cho khi khởi động. Chỉ cho phép một tùy chọn -c cho vi ; Vim chấp nhận tối đa 10. Một hình thức cũ hơn của tùy chọn này +command, vẫn được hỗ trợ.

+commandcùng một ex commandgiới hạn khi sử dụng vi.

Điều +/patternnày cũng được giới hạn trong một lệnh với vi.

(lấy từ vim và ex Editor )


1

Bạn có thể thêm mã sau vào vimrc của mình, Khi bạn quay lại tệp của mình, vim sẽ tự động trở lại vị trí cũ:

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
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.