Mở tên tệp dưới con trỏ như gf, nhưng trong một tab mới (hoặc tách)?


43

Lệnh chế độ bình thường gfđi đến một tệp có đường dẫn con trỏ hiện tại.

Nhưng nó làm như vậy trong cửa sổ hiện tại, thay thế văn bản hiện tại. Điều đó có nghĩa là bạn cần điều hướng trở lại rõ ràng để quay lại sau và bạn cần phải viết các thay đổi trong bộ đệm hiện tại.

Tôi chắc chắn có thể mở tệp dưới con trỏ trong tabview mới chứ?


3
Bật 'hidden'tùy chọn ( set hidden) cho phép bạn điều hướng khỏi bộ đệm chưa được lưu. Đối với tôi, đây là một công cụ tăng năng suất khổng lồ và rất quan trọng để ngừng phụ thuộc vào các phần tách và tab rất nhiều.
tommcdo

Câu trả lời:


56

EDIT: Đề xuất ánh xạ đối xứng độc đáo cho trường hợp phân chia dọc, vì Vim theo mặc định có hai ánh xạ cho trường hợp phân chia ngang.

Có một số cách để chỉnh sửa "tệp theo con trỏ" và trong khi bạn chắc chắn có thể gfánh xạ lại để chỉnh sửa trong một trang mới như @ alexander-myshov đề cập, điều đó có nghĩa là bạn có hai cách để chỉnh sửa nó trong một trang mới, nhưng không có cách nào để chỉnh sửa nó trong cửa sổ hiện tại, đôi khi bạn cũng có thể muốn làm. Không khó để sử dụng ánh xạ chuẩn, nhưng nếu bạn muốn ánh xạ lại một trong số chúng gf, tôi khuyên bạn nên chuyển đổi ánh xạ để bạn không bị mất một trong số chúng.

Một số cách để chỉnh sửa tên tệp theo con trỏ là

  • gf - Chỉnh sửa tập tin hiện có dưới con trỏ trong cùng một cửa sổ
  • C-Wf - Chỉnh sửa tập tin hiện có dưới con trỏ trong cửa sổ chia
  • C-WC-F - Chỉnh sửa tập tin hiện có dưới con trỏ trong cửa sổ chia
  • C-Wgf - Chỉnh sửa tập tin hiện có dưới con trỏ trong trang tab mới

Không có ánh xạ chuẩn để chỉnh sửa tệp hiện có theo con trỏ theo phân chia dọc, nhưng bạn có thể đạt được nó bằng cách trước tiên chia cửa sổ theo chiều dọc và sau đó chỉnh sửa tệp theo con trỏ trong cửa sổ hiện tại.

  • C-Wv+ gf- Chỉnh sửa tệp hiện có dưới con trỏ trong cửa sổ chia theo chiều dọc

Như bạn có thể thấy ở trên, có hai ánh xạ mặc định để chỉnh sửa tệp theo con trỏ theo cách chia ngang. Do đó, bạn có thể sắp xếp lại một trong số chúng cho chuỗi khóa ở trên, mở rộng nhóm bản đồ để bao gồm cả trường hợp phân chia dọc. Bạn có thể ràng buộc bất cứ điều gì, tất nhiên, nhưng điều này dường như hoàn thành đối xứng độc đáo : nnoremap <C-W><C-F> <C-W>vgf. Bây giờ bạn có

  • gf - Chỉnh sửa tập tin hiện có dưới con trỏ trong cùng một cửa sổ
  • C-Wf - Chỉnh sửa tập tin hiện có dưới con trỏ trong cửa sổ chia
  • C-WC-F - Chỉnh sửa tập tin hiện có dưới con trỏ trong cửa sổ chia theo chiều dọc
  • C-Wgf - Chỉnh sửa tập tin hiện có dưới con trỏ trong trang tab mới

Bạn cũng có thể đi đến một dòng cụ thể trong tệp, nếu tên tệp dưới con trỏ được theo sau bởi một số dòng. Nếu bạn có

filename:10

bạn có thể chỉnh sửa tệp và di chuyển con trỏ đến dòng 10 với gF. Điều tương đương là đúng cho C-WFmột phân chia và C-WgFcho một trang. Hoàn thành tính đối xứng cho phân chia dọc không đơn giản như ở đây, nhưng tôi sẽ đề xuất rằng C-WC-S-Fbản đồ thu được nnoremap <C-W><C-S-F> <C-W>vgF, bắt chước Fhoặc Shift+ ftừ các bản đồ mặc định là một ứng cử viên.

Đây :là một ví dụ, bạn có thể sử dụng bất kỳ ký tự nào không phải là ký tự tên tệp (xem :h 'isfname').


Tất cả các lệnh này đi kèm với nước sốt táo, chẳng hạn như

  • mở rộng hoang dã
  • tìm ở nhiều nơi hơn thư mục hiện tại, tùy theo 'path'lựa chọn của bạn
  • thêm phần mở rộng tập tin vào tên tệp, theo 'suffixesadd'tùy chọn của bạn
  • mặt khác sửa đổi tên tệp đã cho để tìm một kết quả khớp, theo 'includeexpr'tùy chọn của bạn

Đọc thêm tại :help gfvà các chủ đề trợ giúp cho các tùy chọn khác nhau này.


Nếu tên tệp dưới con trỏ đặt tên tệp không tồn tại, bạn có thể sử dụng các lệnh chỉnh sửa tiêu chuẩn với <cfile>, như

:edit <cfile> // edit non-existent file under cursor in current window
:split <cfile> // edit non-existent file under cursor in split window
:vsplit <cfile> // edit non-existent file under cursor in vertical split window
:tabe <cfile> // edit non-existent file under cursor in new tabpage

và với những điều này tất nhiên bạn có thể sử dụng những thứ như :spl+10 filenameđể di chuyển con trỏ đến một dòng cụ thể hoặc :tabe+/cologne filenameđể di chuyển con trỏ đến lần xuất hiện đầu tiên của một mẫu.


+1 Nhận xét tốt nhất với lời giải thích rõ ràng, tốt hơn nhiều so với tài liệu được chia theo nhiều chủ đề.
Yêu xác suất

8

Chỉ cần sử dụng các ràng buộc cho điều này:

mở trong một cửa sổ mới (tách):

nnoremap gf <C-W>f
vnoremap gf <C-W>f

mở trong một tab mới:

nnoremap gf <C-W>gf
vnoremap gf <C-W>gf

cũng kiểm tra điều này: :help CTRL-W_gf


Làm những việc này chắc chắn làm việc cho bạn? Vim dường như không muốn tôi sắp xếp lại gfthứ khác. Thậm chí nnoremap gf :echo "hello"<CR> vẫn mở tệp dưới con trỏ trong bộ đệm mới (và vâng, tôi có nguồn gốc vimrc).
tandrewnichols

Ah, nevermind - Tôi có một plugin can thiệp.
tandrewnichols
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.