Tên tệp hoàn thành liên quan đến tệp hiện đang được chỉnh sửa


7

Nếu tôi mở tệp không trực tiếp trong hiện tại, khi tôi sử dụng Vim để tự động hoàn thành tên tệp, Vim sẽ cung cấp các tệp liên quan đến vị trí tôi đã khởi chạy Vim, không phải tệp hiện đang được chỉnh sửa.

Thí dụ

$ find .
  nice-file.xml
  xml/
      messy-file.xml
      ok-file.xml
$ vim xml/messy-file.xml

Bây giờ nếu tôi gõ Ctrl+ x, Ctrl+ f, Vim cung cấp "tệp đẹp" là một tùy chọn hoàn chỉnh. Nó không cung cấp ok-file.xml, mặc dù nó nằm trong cùng thư mục với tệp tôi đang chỉnh sửa.

Tôi muốn Vim hoàn thành tên tệp liên quan đến bất kỳ tệp nào tôi đang chỉnh sửa. Điều đó có thể không?

Câu trả lời:


7

Bạn có thể :cdtrong Vim để thay đổi thư mục hiện tại:

:cd xml

Hay nói chung hơn, nếu bạn muốn đặt nó đôi khi:

nnoremap gp :cd %:p:h<CR>

Hoặc nếu bạn muốn luôn ở trong thư mục của tệp hiện tại:

set autochdir

Xin lưu ý rằng điều này có thể phá vỡ một số plugin, vì chúng có thể dựa vào thư mục hiện tại, bạn có thể sử dụng tại chỗ:

autocmd BufEnter * silent! lcd %:p:h

Nếu bạn không muốn thay đổi thư mục hiện tại, bạn cũng có thể thêm thư mục hiện tại vào đường dẫn hoàn thành của mình:

autocmd BufRead *
  \ let s:tempPath=escape(escape(expand("%:p:h"), ' '), '\ ') |
  \ exec "set path+=".s:tempPath

2
Tôi co rúm lại khi ghi đè lên gfbản đồ hữu ích tuyệt vời . Tôi sẽ đề nghị ghi đè một cái gì đó giống như gshoặc có thể sử dụng <leader>bản đồ
Peter Rincker

nếu một plugin không xử lý acdtốt hơn thì nên sửa. Nhưng cách giải quyết Buf Entry đó không cần thiết nữa
Christian Brabandt

1
autochdirchính xác là những gì tôi đang tìm kiếm. Nó dường như không mâu thuẫn chút nào với lựa chọn plugin khiêm tốn của tôi.
Scribpetacher
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.