Làm cách nào để chỉnh sửa nhiều tệp trong VIM?


168

Tôi biết tôi có thể mở nhiều tệp bằng vimcách thực hiện một số thứ như thế vim 2011-12*.log, nhưng làm cách nào tôi có thể chuyển đổi giữa các tệp và đóng từng tệp một? Ngoài ra, làm cách nào tôi có thể cho biết tên tệp của tệp hiện tại mà tôi đang chỉnh sửa?


Câu trả lời:


171

Trước hết, trong vim bạn có thể nhập :(dấu hai chấm) và sau đó trợ giúp help, ala :helpcho một danh sách các chủ đề tự trợ giúp, bao gồm một hướng dẫn ngắn. Trong danh sách các chủ đề di chuyển con trỏ của bạn qua chủ đề quan tâm và sau đó nhấn ctrl]và chủ đề đó sẽ được mở.

Một nơi tốt để bạn bắt đầu sẽ là chủ đề

|usr_07.txt|  Editing more than one file

Ok, câu trả lời của bạn.

Sau khi bắt đầu vim với danh sách các tệp, bạn có thể chuyển sang tệp tiếp theo bằng cách nhập :nexthoặc :nviết tắt. :wnextlà viết tắt của ghi những thay đổi hiện tại và sau đó chuyển sang tập tin tiếp theo.

Cũng có một tương tự :previous, :wprevious:Next. (Lưu ý đó :plà tốc ký cho :print. Tốc ký cho :previous:prevhoặc :N.)

Để xem bạn đang ở đâu trong danh sách tệp, hãy nhập :argsvà tệp hiện đang được chỉnh sửa sẽ xuất hiện trong [](ngoặc).

Thí dụ:

vim foo.txt bar.txt
:args

kết quả:

[foo.txt] bar.txt

25
: wn là dạng rút gọn của: wnext.
Cửu Long

Bạn cũng có thể làm: tua lại để quay lại tập tin đầu tiên. : e # hoán đổi giữa 2 tập tin. :viết sai rồi! đi đến tập tin tiếp theo mà không cần viết. Cũng nhìn vào: thiết lập autowrite.
Sasquiha

4
Đối với nhiều bộ đệm / cửa sổ / tab cũng xem Cách làm việc hiệu quả với nhiều tệp trong Vim của StackOverflow ? sử dụng các tab của Vim như bộ đệm .
mmoya

1
Tôi thấy chương 22 "Tìm tập tin để chỉnh sửa" cũng rất hữu ích. Nó đi qua sử dụng thư mục explorer để chỉnh sửa các tập tin bạn muốn.
Harry Moreno

: wn tuyệt vời một.
rammayur

54

bạn có thể mở một tệp khác trong khi vim được mở :tabe filenamevà để chuyển sang tệp khác bạn nhập :tabnhoặc :tabptiếp theo và trước đó.

Các phím tắt gTgt cũng có thể được sử dụng để chuyển đổi các tab khi bạn không ở chế độ chỉnh sửa (nghĩa là không ở chế độ chèn, thay thế vv). Trên một số hệ thống Ctrl+ Alt+ Page UpCtrl+ Alt+ Page Downcũng cho phép chuyển đổi tab, nhưng điều này không phải lúc nào cũng hoạt động (ví dụ: nó sẽ không hoạt động trong thiết bị đầu cuối OS X 'ngoài hộp').

Và bạn có thể thấy tên tệp ở đầu ứng dụng vim.


16
Điều này. Đồng thời mở các tệp trong tab với:vim -p file1 file2
Không phải

TUYỆT VỜI! Tôi chưa bao giờ gặp phải điều này trước đây, mặc dù đã sử dụng vim trong nhiều năm. Điều này thay đổi mọi thứ .
me_and

Lưu ý rằng các tab không có ý định làm việc với nhiều tệp. Họ dự định làm việc với nhiều bố cục . Xem bài viết .
patryk.beza

5
Ngoài ra: Nếu bạn đã ở trong vim và muốn thêm một tệp khác, bạn có thể sử dụng: :argadd filenamevà sau đó :nextvào tệp đó. Tương tự như vậy, bạn có thể sử dụng :argdel filenameđể xóa một trong các tệp trong chỉnh sửa.
Luv2code

36

Các lệnh để chuyển đổi giữa các bộ đệm:

:bf            # Go to first file.
:bl            # Go to last file
:bn            # Go to next file.
:bp            # Go to previous file.
:bw            # Close file.

:help buffer để tìm thêm thông tin

Để biết tên tệp sử dụng Ctrl+ G, :filehoặc:f


1
:bwđóng tập tin haha. Đừng quên đọc trợ giúp về việc :bwnó nói rằng bạn chỉ nên sử dụng nó nếu bạn biết bạn đang làm gì. Đó không phải là một vấn đề lớn, nhưng trừ khi bạn muốn xóa sạch tất cả các dấu hiệu và thông tin về tệp, sử dụng tốt hơn :bdhoặc :qnhư một người bình thường
Dylan

1
Thông tin thêm về :bwtrường hợp bạn tò mò: vi.stackexchange.com/questions/2212/ trên
wvducky

25

Một tùy chọn khác ngoài các câu trả lời được đưa ra, là chia cửa sổ với:

:sp
:vsp

:vsplà cho chia dọc. Sau đó sử dụng Ctrl+W <ARROW_KEYS>để di chuyển trong panes.


4
Bạn có thể sử dụng :vsthay vì:vsp
Khaja Minhajuddin

2
Hoặc thậm chí chỉ Ctrl+W, vđể phân chia dọc và Ctrl+W, sphân chia ngang.
Ruslan

1
Tôi đã sử dụng CTRL+Wtrong nhiều năm và gần đây tôi thực hiện rất nhiều chỉnh sửa VI bên trong các trang web. Mỗi lần, tôi gõ lệnh mà không cần suy nghĩ và ... whammmm ... tab trình duyệt là ĐÁNH GIÁ! Tôi tiếp tục lãng quên. Tôi thực sự cần phải học một lối tắt mới.
Jeach

13
:n -> Move to next file
:N -> Move to previous file

10

Tôi đã hỏi một câu hỏi tương tự tại superuser,

"Làm cách nào để sao chép và dán giữa các cửa sổ bash khác nhau và các tệp được mở bằng VI?"

Câu trả lời cho câu hỏi của tôi là bạn không thể, nhưng bạn có thể mở hai tệp trong một cửa sổ bash bằng :splitlệnh của VIM :

  1. Mở tệp bằng $ vim file1, mở tệp thứ hai trong VIM bằng :split file2lệnh.
  2. Hoặc, sử dụng $ vim -o file1 file2từ bash.
  3. Chuyển đổi giữa các tệp - chuyển đổi tệp hoạt động - trong VIM bằng ctrl- w ctrl- w.
  4. Một hoạt động ví dụ sau đó là sao chép (hoặc yank) trong tệp1 yy, chuyển (3), sau đó dán (hoặc đặt) pnội dung vào tệp2.
  5. Mọi thứ khác là bình thường khi một trong hai cửa sổ đang hoạt động, do đó :qthoát ra và :q!thoát khỏi lực lượng.

Bash của tôi là màu đen và trắng, vì vậy tên tệp của mỗi màn hình được đặt theo kiểu dòng 'được chọn' đảo ngược với tên tệp được trích dẫn ở đó.

Khốn nạn!


6

Tôi thấy phương pháp thuận tiện nhất để chỉnh sửa nhiều tệp là sử dụng các tab. Bạn có thể mở nhiều tệp trong các tab riêng biệt thông qua dòng lệnh như vậy:

vim -p file1.txt file2.txt

Hoặc nếu bạn đã mở vim, bạn có thể mở tệp mới trong tab mới như vậy:

:tabe file2.txt

Khi bạn mở các tab, sử dụng gtđể xem tab tiếp theo và gTđể xem tab trước đó.

Bạn cũng có thể chuyển đến tab đầu tiên với 1gt, tab thứ hai với 2gt, v.v.

Bạn có thể đóng các tab bằng cách sử dụng :tabc

Cuối cùng, bạn có thể di chuyển tab hiện tại đến nvị trí thứ với :ntabmnơi nlà bất kỳ số lớn hơn hoặc bằng 0.


6
argadd a/b c/d e/f

argadd ...sẽ thêm tất cả các tệp vào args, và cũng cho :ls/ :buffersvà cho phép bạn chỉnh sửa chúng.


Xem :h arglsit& :h argedit&:h argsd


Ngoài ra, bạn có thể thực hiện một số hành động nhất định chỉ với các đối số :argdo ...và bạn có thể bắt đầu lại với các đối số của mình bằng cách thực hiện :argsd*.


0

Có rất nhiều cách để làm như vậy. Cách đầu tiên, có thể ít thuận tiện hơn, là gọi vimvới các tệp bạn muốn chỉnh sửa - tạo:

vim first_file second_file ...

Nó gọi hai tập tin trong hai bộ đệm. Để chuyển từ tập tin này sang tập tin khác, vui lòng sử dụng :n:N. Để liệt kê các tập tin bạn đang chỉnh sửa, :argssẽ thực hiện công việc. :help buffersẽ giúp bạn nhiều hơn về điều này.


Điêu nay co thể trả lơi câu hỏi của bạn. Nhưng đây là nhiều thông tin hơn:

Có một cách để chỉnh sửa các tệp của bạn theo cách thuận tiện hơn bằng cách chia màn hình bảng điều khiển bằng vim . Để thực hiện việc này, hãy mở hai khung hình bằng :split( :sp) hoặc :vsplit( :vs) trong khi sử dụng vim . Sau đó điều hướng trong các khung này bằng cách sử dụng kết hợp Ctrl+ W> Ctrl+ W. Bạn cũng có thể sử dụng Ctrl+ W+ mũi tên hoặc phím ( H, J, Khoặc L) tương ứng với khung tiếp theo. Khi điều này được thực hiện, chỉnh sửa các tập tin bạn muốn với :e file_name. :help opening-windowsẽ giúp bạn nhiều hơn về điều này.

Bây giờ, nếu bạn muốn thấy sự khác biệt giữa các tệp, hãy sử dụng -dđối số hoặc gọi chương trình vimdiff (giống nhau) với các tệp tương ứng. :help diffsẽ giúp bạn nhiều hơn về điều này.

vim -d first_file second_file ...

Xin vui lòng cho tôi biết nếu bạn có một số vấn đề.


0

Tôi thích sử dụng các cửa sổ phân chia - cả ngang và dọc - để chỉnh sửa nhiều tệp.

Tôi sử dụng tmux để quản lý các cửa sổ đó dễ dàng hơn

https://tmux.github.io/ "Bộ ghép kênh đầu cuối là gì? Nó cho phép bạn dễ dàng chuyển đổi giữa một số chương trình trong một thiết bị đầu cuối, tách chúng ra (chúng tiếp tục chạy trong nền) và gắn lại chúng vào một thiết bị đầu cuối khác. Và thực hiện nhiều hơn nữa. Xem hướng dẫn. "

Ví dụ: Nhìn vào tệp hoặc chạy thử nghiệm ở bên phải, chỉnh sửa tệp thử nghiệm và nguồn ở bên trái: nhập mô tả hình ảnh ở đây


0

:e #(filename) chuyển đổi giữa hai tập tin đã mở

:p cho tập tin trước

:n cho tập tin tiếp theo


Welcomme cho U & L, điều này hầu như không thêm bất cứ điều gì vào câu trả lời khác được đăng cách đây nhiều năm.
Archemar
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.