Tên tệp hoàn thành với không gian


8

Tôi có rất nhiều tệp có dấu cách trong tên của chúng và điều này gây ra sự cố cho tôi. Nếu tôi cố gắng hoàn thành dòng lệnh cho lệnh find và một trong những tệp này xuất hiện, Vim sẽ tìm thấy nó, nhưng nó sẽ không tải vì không gian không thoát.

Ví dụ: Tôi đã ở vim rồi và tôi gõ

:find fo<Tab>

Để hoàn thành foo bar.txt, Vim sau đó tìm thấy nó và đưa ra một lỗi vì nó chỉ mong đợi một tên tệp. Có nghĩa là nó đọc

:find foo bar.txt

Mà không tải.

Có cách nào để khắc phục điều này không, và Vim có tự động thoát khỏi không gian không?

Tôi đang sử dụng VimTouch, chạy Vim 7.3

Chỉnh sửa: Gần đây tôi nhận ra rằng Vim sẽ thoát tên đường dẫn cho tôi, nhưng bí ẩn sẽ không làm như vậy cho tên tệp.


1
Đây dường như là một dòng lệnh chứ không phải là một vimvấn đề (ít nhất, có vẻ như bạn đang nói về việc mở một vimphiên thay vì thực hiện một cái gì đó trong vim); Nhưng, dù sao, sẽ đặt một "công việc hàng đầu ? Đó là, nếu bạn muốn tab hoàn thành tệp a b, nhập vim "avà sau đó là tab, chứ không phải là vim atab? (Tôi không chắc chắn, bởi vì, trong cả vim và vỏ của tôi, không gian sẽ tự động thoát khi hoàn thành tab.)
LSpice

1
Bạn có thể giải thích chính xác những gì bạn đang làm? Bộ đệm của bạn trông như thế nào? Bạn đã sử dụng những lệnh nào? Có gì chính xác đã xảy ra?
Martin Tournoij

Tôi chỉnh sửa câu hỏi để làm rõ nó.
Một người đàn ông vàng

Câu trả lời:


1

: tìm foo bar.txt

Lệnh này sẽ tìm kiếm 2 tệp cùng một lúc mà không thể có trong vim. Đây là nguyên nhân gây ra lỗi của bạn.

Khi xử lý các tệp có không gian trong đó, bạn có thể nối thêm\ sau mỗi từ

như vậy :find foo\ bar.txt

Nhưng phương pháp này hơi khó xử vì bạn có rất nhiều tệp

Vì vậy, tôi đã sửa đổi một lệnh cho phù hợp với nhu cầu của bạn

Hy vọng nó hoạt động

Thêm nó vào .vimrc của bạn

và sử dụng :Findđể tìm kiếm và mở tệp có dấu cách

" :Find will escape a file name and open it
command! -bang -nargs=* Find :call Find(<q-bang>, <q-args>) 
function! Find(bang, filename) 
    :exe "find".a:bang." ". fnameescape(a:filename) 
endfu

Không liên quan đến câu hỏi được hỏi nhưng có thể giúp ích

Vấn đề này cũng gặp phải khi lưu các tệp có không gian trong đó

thích :w foo bar.txtđưa ra lỗi

Để giải quyết điều đó

" :W and :Save will escape a file name and write it
command! -bang -nargs=* W :call W(<q-bang>, <q-args>) 
command! -bang -nargs=* Save :call Save(<q-bang>, <q-args>)

function! W(bang, filename) 
    :exe "w".a:bang." ". fnameescape(a:filename) 
endfu

function! Save(bang, filename) 
    :exe "save".a:bang." ". fnameescape(a:filename) 
endfu

Thêm phần này vào .vimrc để sử dụng :Whoặc :Saveđể lưu tệp có dấu cách.

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.