Làm thế nào để bạn trở về từ 'gf' trong Vim


187

Tôi đang sử dụng Vim cho các cửa sổ được cài đặt ở chế độ Unix. Nhờ trang web này mà bây giờ tôi sử dụnggf lệnh để đi đến một tệp dưới con trỏ.

Tôi đang tìm kiếm một lệnh để:

  1. trở về tệp trước đó (tương tự Ctrl+T cho ctags) hoặc
  2. ánh xạ lại gf để tự động khởi chạy tệp mới trong một cửa sổ mới.

Câu trả lời:


294

Tôi sử dụng Ctrl-O


43
CTRL-O để đi đến một vị trí cũ hơn trong danh sách nhảy, <Tab> hoặc CTRL-I để đến một vị trí mới hơn.
Sébastien RoccaSerra

4
@ g33kz0r, ghi nhớ sẽ là O = OUT, I = IN => Ctrl - O đưa bạn ra ngoài, Ctrl đưa bạn vào. Nếu mọi bước nhảy giống như đi qua một cánh cửa, đó là.
kronn

CTRL-O sẽ nhảy đến vị trí được truy cập lần cuối, điều này thật khó chịu khi tệp mới đã được tìm kiếm. Tôi thích Shift-Ctrl-6 (trong trường hợp của tôi Ctrl-6 không hoạt động)
Adriano

71

Tôi thường xuyên sử dụng Ctrl- 6cho việc này.

Nó rất tiện lợi vì nó cho phép tôi nhanh chóng nhảy qua lại giữa hai tập tin.


47

Bạn có thể muốn sử dụng CTRL-W gfđể mở tệp trong một tab mới.

Bạn có thể đóng tệp mới mở như mọi khi :bd, hoặc sử dụng CTRL-6và các cách thay đổi bộ đệm thông thường khác.


7
tab thuận tiện hơn bộ đệm đối với tôi và sử dụng nnoremap gf <C-W>gfđể mở trong tab mới có thể tốt hơn.
Searene

13

Sử dụng gf để truy cập vào một tệp và sử dụng: bf để quay lại


1
Tôi đã có hai cửa sổ mở trong một tab và điều này chỉ mở cửa sổ thứ hai trong lần đầu tiên thay vì quay trở lại bộ đệm trước đó.
Kenny Evitt

12

Chỉ cần sử dụng :e#theo sau Enter- về cơ bản là nói để chỉnh sửa tệp cuối cùng (gần đây nhất).


9

Ctrl-Shift-6 là một.

:e#↲ là một cái khác.


8
Sự thay đổi là không cần thiết. Ngừng lạm dụng ngón tay của bạn.
Zathrus

6
Ừm. Tôi thuộc loại hẹn giờ cũ. Ctrl-6 sẽ không hoạt động với vi trên thiết bị đầu cuối Wyse mà tôi từng có tại nơi làm việc nhiều năm trước. Xem, một số điều vẫn còn khắc. Và việc không sử dụng Shift trong kết hợp này sẽ khó tạo ra sự khác biệt đối với việc lạm dụng ngón tay của tôi. Này, ít nhất bạn đã cố gắng hết sức. HTH. TAY.
tzot

Điều này chuyển sang những gì được gọi là tập tin thay thế .
jpaugh

5

Tôi có CTRL-W f để làm việc.
Thật đáng buồn khi tôi đã dành quá nhiều thời gian để hoàn thiện bản đồ cho các lệnh này chỉ để phát hiện ra rằng có các phiên bản dựng sẵn.


5

Tôi không biết câu trả lời cho phần 2 của câu hỏi của bạn, nhưng tôi có thể giúp với phần 1. Sử dụng

:e#

Vim duy trì một danh sách các tập tin (bộ đệm) mà nó đang chỉnh sửa. Nếu bạn gõ

:buffers

nó sẽ liệt kê tất cả các tập tin bạn đang chỉnh sửa. Tệp trong danh sách đó có% bên cạnh là tệp hiện tại. Tệp có # bên cạnh là tệp thay thế. : e # sẽ chuyển giữa tập tin hiện tại và tập tin thay thế. Thay vì gõ nhiều như vậy, tôi ánh xạ F2 tới: e # để tôi có thể dễ dàng lật giữa các tệp hiện tại và thay thế. Tôi ánh xạ lệnh tới F2 bằng cách thêm lệnh này vào .vimrc

nmap `<F2> :e#<CR>`

2
Tôi không nghĩ bạn muốn sử dụng: e # vì điều đó có khả năng tải lại tệp. : b # không tương đương mà không có vấn đề này.
lambacck

Điểm tốt. Điều đó chuyển sang bộ đệm khác mà không cần tải lại.
codebunny


2

Khi bạn mở một tệp mới (với gf hoặc : n hoặc lệnh khác), tệp cũ vẫn nằm trong danh sách bộ đệm. Bạn có thể liệt kê các tệp đang mở với : ls

Nếu bạn muốn điều hướng dễ dàng giữa các bộ đệm trong vim, bạn có thể tạo ánh xạ như thế này:

nmap <M-LEFT> :bN<cr>
nmap <M-RIGHT> :bn<cr>

Bây giờ bạn có thể chuyển đổi giữa các bộ đệm với Alt + mũi tên trái hoặc Alt + mũi tên phải.

Tài liệu đầy đủ về ánh xạ có ở đây:

:help map.txt

0

Tôi chưa nhìn vào lệnh gf của bạn nhưng tôi tưởng tượng nó sử dụng lệnh : e hoặc : find .
Giả sử rằng điều này là chính xác, chỉ cần thay thế : e hoặc : find bằng : new (hoặc : vnew để phân chia theo chiều dọc) và tệp sẽ mở trong một cửa sổ mới thay vì cùng một cửa sổ.

ví dụ

"Chuyển đổi giữa tiêu đề và cpp
nmap, s: tìm%: t: ​​r.cpp <CR>
nmap, S: mới%: t: ​​r.cpp <CR>
nmap, h: tìm%: t: ​​rh <CR>
nmap, H:% mới: t: rh <CR>
nmap, F: new = bung rộng ("<cfile>: t") <CR> <CR>
nmap, d: new = bung rộng ("<cfile>") <CR> <CR> 


2
gfđược tích hợp sẵn. Nó thuộc về tất cả chúng ta. :-)
jpaugh
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.