Cách làm việc hiệu quả với nhiều tệp trong Vim


1099

Tôi đã bắt đầu sử dụng Vim để phát triển các tập lệnh Perl và bắt đầu thấy nó rất mạnh mẽ.

Một điều tôi thích là có thể mở nhiều tệp cùng một lúc với:

vi main.pl maintenance.pl

và sau đó nhảy giữa chúng với:

:n
:prev

và xem tập tin nào được mở bằng:

:args

Và để thêm một tập tin, tôi có thể nói:

:n test.pl

mà tôi mong đợi sau đó sẽ được thêm vào danh sách các tệp của tôi, nhưng thay vào đó, nó xóa sạch danh sách tệp hiện tại của tôi và khi tôi nhập :argstôi chỉ test.plmở.

Vậy làm thế nào tôi có thể thêm và xóa các tập tin trong danh sách args của tôi?


5
tmux ... sử dụng vim trong mỗi khung
Tommy

4
@ Mẹ: bằng cách này, bạn không thể dán nội dung đã bị xóa / bị xóa giữa các tệp (bộ đệm vims). Nếu chỉ có sẵn một bảng tạm có thể giúp (xem câu trả lời được chấp nhận: stackoverflow.com/questions/5532878/ mẹo )
ChristophS

1
:Ncó vẻ như là một cách dễ dàng hơn để đi đến tập tin trước đó ...
Gert van den Berg

vimcasts.org/clists/the-argument-list ? VimCasts thực sự rất được khuyến khích khi học vim.
mcepl

Câu trả lời:


1171

Tại sao không sử dụng các tab (được giới thiệu trong Vim 7)? Bạn có thể chuyển đổi giữa các tab với :tabn:tabp, Với :tabe <filepath>bạn có thể thêm một tab mới; và với một thường xuyên :qhoặc :wqbạn đóng một tab. Nếu bạn ánh xạ :tabn:tabptới F7/ F8phím của mình, bạn có thể dễ dàng chuyển đổi giữa các tệp.

Nếu không có nhiều tệp hoặc bạn không có Vim 7, bạn cũng có thể chia màn hình của mình thành nhiều tệp : :sp <filepath>. Sau đó, bạn có thể chuyển đổi giữa các màn hình chia nhỏ bằng Ctrl+ Wvà sau đó là một phím mũi tên theo hướng bạn muốn di chuyển (hoặc thay vì các phím mũi tên, wcho màn hình chia nhỏ tiếp theo và Wtrước đó)


72
Để lưu và đóng một tab, bạn cũng có thể sử dụng ZZthay vì :wq(giống như thường lưu và đóng)
Andreas Grech

40
Tôi đang sử dụng gói vim-gnome trong Ubuntu 10.10 và tôi có thể chuyển đổi giữa các tab bằng Ctrl + PageUp và Ctrl + PageDown. Tôi đã không phải cấu hình bất cứ điều gì; nó được mặc định
Joey Adams

268
Ngoài ra, trong chế độ chỉnh sửa gt, chuyển sang tab tiếp theo và gTchuyển đến tab trước đó.
Trưởng khoa

40
Bạn có thể chuyển đến bất kỳ tab nào bằng cách sử dụng ngt, trong đó n là chỉ mục của tab (bắt đầu bằng một). Tôi nghĩ có một tùy chọn hiển thị chỉ mục của từng tab gần tên tệp, nhưng tôi không biết nó là gì. Nếu ai biết, tôi rất thích nghe nó.
void-con trỏ

81
Cũng lưu ý rằng bạn có thể sử dụng -pcờ để mở nhiều tệp trong các tab từ dòng lệnh. Ví dụ: gvim -p main.pl maintenance.plsẽ mở hai tệp này trong các tab.
Matthew Strawbridge

554

Danh sách

Để xem danh sách các bộ đệm hiện tại, tôi sử dụng:

:ls

Khai mạc

Để mở một tập tin mới, tôi sử dụng

:e ../myFile.pl

với hoàn thành tab nâng cao (đặt set wildmenutrong của bạn .vimrc).

Lưu ý: bạn cũng có thể sử dụng :findsẽ tìm kiếm một bộ đường dẫn cho bạn, nhưng trước tiên bạn cần tùy chỉnh các đường dẫn đó.


Chuyển đổi

Để chuyển giữa tất cả các tệp đang mở, tôi sử dụng

:b myfile

với hoàn thành tab nâng cao (vẫn set wildmenu).

Lưu ý: :b#chọn tệp đã truy cập gần nhất, vì vậy bạn có thể sử dụng tệp để chuyển nhanh giữa hai tệp.


Sử dụng cửa sổ

Ctrl-W sCtrl-W vđể phân chia cửa sổ hiện tại theo chiều ngang và chiều dọc. Bạn cũng có thể sử dụng :split:vertical split( :sp:vs)

Ctrl-W wđể chuyển giữa các cửa sổ đang mở và Ctrl-W h( jhoặc khoặc l) để điều hướng qua các cửa sổ đang mở.

Ctrl-W cđể đóng cửa sổ hiện tại và Ctrl-W ođóng tất cả các cửa sổ ngoại trừ cửa sổ hiện tại.

Bắt đầu vim với một -ohoặc -Ocờ sẽ mở mỗi tệp trong phần tách riêng của nó.


Với tất cả những điều này, tôi không cần các tab trong Vim và ngón tay của tôi tìm thấy bộ đệm của tôi chứ không phải mắt tôi.

Lưu ý: nếu bạn muốn tất cả các tệp đi đến cùng một phiên bản của Vim, hãy khởi động Vim với --remote-silenttùy chọn.


4
Trong trường hợp bạn đang chơi với nhiều bộ đệm, tôi muốn giới thiệu LustyJuggler .
Arun M

1
Cảm ơn bạn đã tạo một tham chiếu nhanh rất đẹp cho các lệnh vim được sử dụng thường xuyên nhất khi làm việc với nhiều tệp.
tử

9
:blà một lệnh rất mạnh bởi vì nó có thể chấp nhận cả số bộ đệm và tên bộ đệm làm đối số. Nhiều hơn những gì? Nó cũng hỗ trợ hoàn thành tab trên bất kỳ phần nào của tên tệp. Này, bạn có foo.txt mở trong bộ đệm 2, bạn có thể gõ :b 2<Enter>hoặc :b foo.txthoặc :b oo<Tab><Enter>để chỉnh sửa tập tin đó. Có, cái cuối cùng sẽ hoàn thành 'oo' thành 'foo.txt' khi bạn nhấn <Tab>.
Susam Pal

21
Tôi có dòng này trong .vimrc : nnoremap gb :ls<cr>:b<space>. Khi tôi gõ gbtrong chế độ lệnh, nó liệt kê các bộ đệm và kiểu mở của tôi :b , sẵn sàng để tôi bắt đầu nhập tên / số bộ đệm.
nkorth

5
Điều đáng nói là :bsẽ chấp nhận kết hợp chuỗi con miễn là nó không rõ ràng. Vì vậy, nếu bạn có tập tin mở foo, barbaz, chỉ :b zlà đủ để chuyển bạn đến với bazbộ đệm, và :b oohoặc :b osẽ đưa bạn đến foođệm.
Soren Bjornstad

233
:ls

cho danh sách các bộ đệm mở

  • :bp bộ đệm trước
  • :bn bộ đệm tiếp theo
  • :bn( nmột số) di chuyển đến bộ đệm thứ n
  • :b <filename-part> với tab-key cung cấp tự động hoàn thành (tuyệt vời !!)

Trong một số phiên bản của vim, bnbpthực tế bnextbprevioustương ứng. Tab tự động hoàn thành là hữu ích trong trường hợp này.

Hoặc khi bạn ở chế độ bình thường, hãy sử dụng ^để chuyển sang tập tin cuối cùng mà bạn đang làm việc.

Ngoài ra, bạn có thể lưu phiên của vim

:mksession! ~/today.ses

Lệnh trên lưu các bộ đệm và cài đặt tệp đang mở hiện tại vào ~/today.ses. Bạn có thể tải phiên đó bằng cách sử dụng

vim -S ~/today.ses

Không có rắc rối nhớ nơi bạn rời đi ngày hôm qua. ;)


đi đến một bộ đệm cụ thể: N CTRL- ^
Tom Yang

8
@shyam Em nghĩ anh yêu em! Bằng cách nào đó tôi không bao giờ biết chắc chắn về lệnh mksession, nhưng hôm nay tôi không quyết định PHẢI có cách nào đó để lưu danh sách các tệp để dễ dàng mở chúng. Điều này thậm chí còn tốt hơn vì nó thậm chí dường như lưu trữ trạng thái hoàn chỉnh của sự vật (phân chia cửa sổ, vị trí bộ đệm, v.v.). Vì vậy, cảm ơn!
Kasapo

Ngoài ra, sử dụng "dấu để nhảy đến nơi bạn đã ở trong tệp lần trước.
Chromium

113

Để thêm vào argsdanh sách:

:argadd

Để xóa khỏi argsdanh sách:

:argdelete

Trong ví dụ của bạn, bạn có thể sử dụng :argedittest.pl để thêm test.pl vào argsdanh sách và chỉnh sửa tệp trong một bước.

:help args cung cấp nhiều chi tiết hơn và sử dụng nâng cao


4
Đây thực sự là câu trả lời cho câu hỏi, mặc dù được đặt tiêu đề, các câu trả lời khác là hoàn toàn công bằng.
Soren Bjornstad

48

Tôi sử dụng các lệnh bộ đệm - :bn(bộ đệm tiếp theo), :bp(bộ đệm trước) :buffers(liệt kê bộ đệm mở) :b<n>(bộ đệm mở n) :bd(xóa bộ đệm). :e <filename>sẽ chỉ mở vào một bộ đệm mới.


18
: ls nhanh hơn: bộ đệm
aehlke

42

Tôi nghĩ rằng bạn có thể đang sử dụng lệnh sai khi xem danh sách các tệp mà bạn đã mở.

Hãy thử thực hiện :lsđể xem danh sách các tệp bạn đã mở và bạn sẽ thấy:

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

Sau đó, bạn có thể thoát qua các tệp bằng cách tham khảo chúng theo các số được liệt kê, ví dụ: 3b

hoặc bạn có thể chia màn hình của mình bằng cách nhập số nhưng sử dụng sb thay vì chỉ b.

Vì% dành cho tệp hiện đang hiển thị và # đề cập đến tệp thay thế.

Bạn có thể dễ dàng chuyển đổi giữa hai tệp này bằng cách nhấn Ctrl Shift 6

Chỉnh sửa: giống như :lsbạn có thể sử dụng :regđể xem nội dung hiện tại của các thanh ghi của mình, bao gồm các thanh ghi 0-9 có chứa những gì bạn đã xóa. Điều này đặc biệt hữu ích nếu bạn muốn sử dụng lại một số văn bản mà bạn đã xóa trước đó.


2
Rất vui khi thấy các thông tin liên quan như% và #. +1
Ashish

35

Vim (nhưng không phải Vi ban đầu!) Có các tab mà tôi tìm thấy (trong nhiều ngữ cảnh) vượt trội so với bộ đệm. Bạn có thể nói :tabe [filename]để mở một tập tin trong một tab mới. Đạp xe giữa các tab được thực hiện bằng cách nhấp vào tab hoặc bằng các tổ hợp phím [ n ] gtgT. Đồ họa Vim thậm chí có các tab đồ họa.


1
Cảm ơn, nghe có vẻ hay, nhưng thật không may, chúng tôi chỉ cài đặt VIM 6.1 trên máy chủ.
Edward Tanguay

1
Tab rất tiện dụng với các ký tự đại diện : vim -p dir/*. Kích thước tab tối đa là 10, nhưng bạn có thể thay đổi nó trong ~/.vimrccài đặt tabpagemaxthành một số giá trị khác.
Campa

27

Nhiều câu trả lời ở đây! Những gì tôi sử dụng mà không phát minh lại bánh xe - các plugin nổi tiếng nhất (sẽ không chết sớm và được nhiều người sử dụng) sẽ cực kỳ nhanh và táo tợn.

  • ctrlpvim / ctrlp.vim - để tìm tệp theo tên tìm kiếm mờ theo vị trí của nó hoặc chỉ tên của nó
  • jlanzarotta / bufexplorer - để duyệt bộ đệm đã mở (khi bạn không nhớ có bao nhiêu tệp bạn đã mở và sửa đổi gần đây và bạn không nhớ chúng ở đâu, có lẽ vì bạn đã tìm kiếm chúng bằng Ag)
  • rking / ag.vim để tìm kiếm các tập tin liên quan đến gitignore
  • scrooloose / nerdtree để xem cấu trúc thư mục, tìm kiếm, thêm / xóa / sửa đổi các tập tin

EDIT: Gần đây tôi đã sử dụng dyng / ctrlsf.vim để tìm kiếm với chế độ xem theo ngữ cảnh (như tìm kiếm Sublime) và tôi đã chuyển công cụ từ ag sang ripgrep . Hiệu suất là xuất sắc.

EDIT2: Cùng với CtrlSF, bạn có thể sử dụng mg979 / vim-visual-multi , thay đổi nhiều tệp cùng một lúc và cuối cùng lưu chúng trong một lần.


2
ctrlp đã di chuyển và hiện được tìm thấy tại ctrlpvim / ctrlp.vim
Dave

1
Đây là câu trả lời đúng! Tại sao nó không có nhiều upvote?
Thomas Möbius

2
Nó không có nhiều upvote hơn vì câu hỏi đã được hỏi vào năm 2008 :)
burnettk

chính xác. Tôi không thể tưởng tượng vim trong cài đặt dev mà không có các plugin đó.
Edgar Alloro

25

Những điều như :e:baddsẽ chỉ chấp nhận MỘT đối số, do đó, những điều sau đây sẽ thất bại

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

Nếu bạn muốn thêm nhiều tệp từ trong vim, hãy sử dụng arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*

21

Một số câu trả lời trong chủ đề này đề xuất sử dụng các tab và những người khác đề nghị sử dụng bộ đệm để thực hiện điều tương tự. Tab và bộ đệm là khác nhau. Tôi thực sự khuyên bạn nên đọc bài viết này "Sự điên rồ của Vim Tab - Bộ đệm vs Tab ".

Đây là một bản tóm tắt hay mà tôi lấy từ bài viết:

Tóm lược:

  • Một bộ đệm là văn bản trong bộ nhớ của một tập tin.
  • Một cửa sổ là một khung nhìn trên một bộ đệm.
  • Một trang tab là một bộ sưu tập các cửa sổ.

2
Bạn có được bản tóm tắt đó bằng cách nhập :help windowvào Vim
icc97

19

Khi sử dụng nhiều tệp trong vim, tôi chủ yếu sử dụng các lệnh này (với ~ 350 tệp được mở):

  • :b <partial filename><tab> (nhảy đến một bộ đệm)
  • :bw (xóa bộ đệm, xóa bộ đệm)
  • :e <file path> (chỉnh sửa, mở bộ đệm mới>
  • pltags - cho phép nhảy đến các định nghĩa chương trình con / phương thức

2
350 tập tin !!! Thật ấn tượng. Làm thế nào để bạn tìm đúng bộ đệm để nhảy đến? Bạn đã bao giờ làm chia tách?
Brian O'Dell

3
@ BrianO'Dell :b <partial filename><tab>cộng với công việc set wildmenucủa bạn .vimrctốt khi bạn đã mở hàng tấn bộ đệm. Sau đó, bạn chỉ cần khớp một phần và cuộn qua những cái nó tìm thấy. Trong các trình chỉnh sửa tốt khác, bạn có tìm kiếm mờ nhưng thông thường bạn không thể hạn chế tìm kiếm mờ đó chỉ với các tệp bạn đã mở.
icc97

17

Thêm một câu trả lời khác vì điều này không nằm trong bất kỳ câu trả lời nào

Để thay đổi tất cả các bộ đệm để tabxem.

 :tab sball

sẽ mở tất cả các bộ đệm để xem tab. Sau đó chúng ta có thể sử dụng bất kỳ lệnh nào liên quan đến tab

gt or :tabn           "    go to next tab
gT or :tabp or :tabN  "    go to previous tab

chi tiết tại :help tab-page-commands.

Chúng tôi có thể hướng dẫn vim mở, dưới dạng xem tab, nhiều tệp bằng cách vim -p file1 file2. alias vim='vim -p'sẽ hữu ích.
Điều tương tự cũng có thể đạt được bằng cách theo dõi tự động trong~/.vimrc

 au VimEnter * if !&diff | tab all | tabfirst | endif

Dù sao để trả lời câu hỏi: Để thêm vào danh sách arg: arga file ,

Để xóa khỏi danh sách arg: argd pattern

Hơn :help arglist


16

Bạn có thể muốn sử dụng nhãn hiệu toàn cầu Vim .

Bằng cách này, bạn có thể nhanh chóng thoát giữa các tệp và thậm chí đến vị trí được đánh dấu trong tệp. Ngoài ra, các lệnh chính là ngắn: 'C đưa tôi đến mã tôi đang làm việc, 'T đưa tôi đến bài kiểm tra đơn vị tôi đang làm việc.

Khi bạn thay đổi địa điểm, việc đặt lại các dấu cũng nhanh chóng: mC đánh dấu vị trí mã mới, mT đánh dấu vị trí thử nghiệm mới.


12

Tôi sử dụng cùng một tệp .vimrc cho gVim và dòng lệnh Vim. Tôi có xu hướng sử dụng các tab trong gVim và bộ đệm trong dòng lệnh Vim, vì vậy tôi đã thiết lập .vimrc của mình để làm việc với cả hai cách dễ dàng hơn:

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

Điều này làm tắc nghẽn các ánh xạ hiện có cho HL, nhưng nó giúp chuyển đổi giữa các tệp cực kỳ nhanh chóng và dễ dàng. Chỉ cần nhấn Hcho tiếp theo và Lcho trước đó; cho dù bạn đang sử dụng tab hay bộ đệm, bạn sẽ nhận được kết quả như mong muốn.


1
Tôi thích những ánh xạ này. Cũng thử Ctrl-H, Ctrl-L. Tôi thiết lập thiết bị đầu cuối Firefox và gnome với cùng ánh xạ. Rất đẹp để có các phím tắt tab nhất quán.
cmcginty

4
sử dụng khóa lãnh đạo của bạn thay vì ctrl để tránh
ghi đè lên

10

Nếu bạn định sử dụng nhiều bộ đệm, tôi nghĩ điều quan trọng nhất là đặt ẩn để nó cho phép bạn chuyển đổi bộ đệm ngay cả khi bạn có các thay đổi chưa lưu trong cái bạn đang rời đi.


9

Nếu chỉ sử dụng các lệnh tích hợp vim , thì lệnh tốt nhất mà tôi từng thấy để chuyển đổi giữa nhiều bộ đệm là:

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

Nó kết hợp hoàn hảo cả hai :ls:bcác lệnh - liệt kê tất cả các bộ đệm đã mở và chờ bạn nhập lệnh để chuyển bộ đệm.

Đưa ra ánh xạ trên trong vimrc, khi bạn nhập <Leader>f,

  • Tất cả các bộ đệm đã mở được hiển thị
  • Bạn có thể:
    • Kiểu 23 để đi đến bộ đệm 23,
    • Kiểu # để đi đến bộ đệm thay thế / MRU,
    • Nhập tên một phần của tệp, sau đó nhập <Tab>hoặc<C-i> để tự động hoàn tất,
    • Hoặc chỉ <CR>hoặc <Esc>để ở trên bộ đệm hiện tại

Ảnh chụp đầu ra cho ánh xạ khóa trên là:

:set nomore|:ls|:set more
  1  h    "script.py"    line 1
  2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
  3 %a    "README.md"    line 17 -- '%' for current buffer
  4       "file3.txt"    line 0  -- line 0 for hasn't switched to
  5     + "/etc/passwd"  line 42 -- '+' for modified
:b '<Cursor> here'

Trong ảnh chụp nhanh ở trên:

  • Cột thứ hai: %acho hiện tại, hcho ẩn,# cho trước đó, trống cho chưa được chuyển sang.
  • Cột thứ ba: +để sửa đổi.

Ngoài ra, tôi mạnh mẽ đề nghị set hidden. Xem :help 'hidden'.


Đây là một ý tưởng hay! Tôi đã sử dụng :b:lsrất nhiều nhưng độc lập. Tôi nghĩ rằng điều này trở nên ít hữu ích hơn khi bạn có nhiều bộ đệm hơn một trang, nhưng sau đó bạn vẫn có thể quay lại:b
icc97

Vui mừng khi thấy nó giúp. Chúc mừng! :)
qeatzy

Từ wiki Vim này , bạn có thể rút ngắn nó xuống một chút nnoremap <leader>f :ls<cr>:b<space>, điều đó có thể gây ra sự cố với lệnh 'more'
icc97

Có, cách đó hoạt động hoàn hảo nếu mở ít tệp hơn (trường hợp sử dụng thông thường). set morecông cụ chỉ tạo ra sự khác biệt khi có nhiều tệp được mở (nhiều hơn một trang), ví dụ vim /usr/include/*, mặc dù sau đó ít hữu ích hơn.
qeatzy

8

Tôi sử dụng như sau, điều này cung cấp cho bạn rất nhiều tính năng mà bạn mong đợi sẽ có trong các trình soạn thảo khác, chẳng hạn như Text / Textmate tuyệt vời

  1. Sử dụng bộ đệm không 'trang tab'. Bộ đệm là khái niệm giống như các tab trong hầu hết các trình soạn thảo khác.
  2. Nếu bạn muốn có giao diện giống như có các tab, bạn có thể sử dụng plugin vim- air với cài đặt sau trong .vimrc: let g:airline#extensions#tabline#enabled = 1. Điều này sẽ tự động hiển thị tất cả các bộ đệm dưới dạng tiêu đề tab khi bạn không mở trang tab
  3. Sử dụng vim-unimimed của Tim Pope cho [b]b để chuyển sang bộ đệm trước đó / tiếp theo (cộng với một loạt các tính năng khác)
  4. set wildmenutrong .vimrckhi bạn gõ :b <file part>+Tab cho một bộ đệm bạn sẽ nhận được một danh sách các bộ đệm càng tốt mà bạn có thể sử dụng trái / phải mũi tên để di chuyển qua
  5. Sử dụng plugin vim-obsession của Tim Pope để lưu trữ các phiên chơi độc đáo với hãng hàng không (Tôi đã rất đau đớn với các phiên và plugin )
  6. Sử dụng plugin vim-giấm của Tim Pope . Điều này làm việc với người bản địa :Explorenhưng làm việc với nó dễ dàng hơn nhiều. Bạn chỉ cần gõ -để mở explorer, đó là chìa khóa tương tự để đi lên một thư mục trong explorer. Làm cho điều hướng nhanh hơn (tuy nhiên với fzf tôi hiếm khi sử dụng điều này)
  7. fzf (có thể được cài đặt như một plugin vim) cũng là một công cụ tìm mờ thực sự mạnh mẽ mà bạn có thể sử dụng để tìm kiếm các tệp (và cả bộ đệm nữa). fzf cũng chơi rất hay với fd (phiên bản tìm nhanh hơn)
  8. Sử dụng Ripgrep với vim-ripgrep để tìm kiếm thông qua cơ sở mã của bạn và sau đó bạn có thể sử dụng :cdotrên các kết quả để thực hiện tìm kiếm và thay thế

fzf và fzf-vim đã thay đổi cuộc đời tôi, không thể đề nghị nó đủ. Nó cũng hoạt động rất tốt trên các cửa sổ, ngay cả trong bảng điều khiển để tìm kiếm các tập tin mờ. Trên các cửa sổ sử dụng phụ trợ ripgrep (rg), theo kinh nghiệm của tôi vượt trội hơn bất kỳ công cụ find / grep nào khác (như silversearcher hoặc de windows mặc định thấy rằng fzf sử dụng iirc). Bạn có thể sử dụng nó để tìm kiếm thông qua bất kỳ danh sách các mục: tập tin được sử dụng gần đây nhất, bộ đệm hiện đang mở, dòng trong bộ đệm hiện tại, dòng trong codebase (cwd), thẻ, .. bạn có thể dễ dàng lập trình tìm kiếm mờ danh sách của riêng bạn. Tốt quá (Tôi đến từ ctrl-p và không bao giờ nhìn lại)
Emile Vrijdags 13/03/19

7

Cách của tôi để làm việc hiệu quả với nhiều tệp là sử dụng tmux.

Nó cho phép bạn chia các cửa sổ theo chiều dọc và chiều ngang, như trong:

nhập mô tả hình ảnh ở đây

Tôi có nó hoạt động theo cách này trên cả máy mac và linux của tôi và tôi thấy nó tốt hơn cơ chế chuyển đổi khung cửa sổ gốc được cung cấp (trên máy Mac). Tôi thấy việc chuyển đổi dễ dàng hơn và chỉ với tmux, tôi mới có thể có được 'trang mới trong cùng thư mục hiện tại' hoạt động trên máy mac của mình (mặc dù thực tế là dường như có các tùy chọn để mở các bảng mới trong cùng thư mục) một mảnh quan trọng đáng ngạc nhiên. Một khung mới ngay lập tức tại vị trí hiện tại là hữu ích đáng kinh ngạc. Một phương pháp thực hiện các bảng mới với cùng các tổ hợp phím cho cả hai hệ điều hành là rất quan trọng đối với tôi và phần thưởng cho tất cả khả năng tương thích cá nhân trong tương lai. Ngoài nhiều bảng tmux, tôi cũng đã thử sử dụng nhiều tab, ví dụ:nhập mô tả hình ảnh ở đây nhiều cửa sổ và nhiều cửa sổ mới, ví dụ:nhập mô tả hình ảnh ở đâyvà cuối cùng tôi đã thấy rằng nhiều tấm tmux là hữu ích nhất đối với tôi. Tôi rất 'trực quan' và muốn giữ các bối cảnh khác nhau của mình ngay trước mặt, kết nối với nhau như những tấm panen.

tmux cũng hỗ trợ các bảng ngang và dọc mà cũ hơn screen(mặc dù iterm2 của mac dường như hỗ trợ nó, nhưng một lần nữa, cài đặt thư mục hiện tại không hoạt động với tôi). tmux 1.8


1
Tôi đã phải cười khi thấy ví dụ nhân tạo của bạn về "nhiều cửa sổ". Tôi hy vọng không ai làm việc như vậy :-) Dù sao, tôi sử dụng ốp lát wm thậm chí còn tốt hơn (tôi đã chuyển từ tmux sang i3wm). Chỉ cần hoàn thành câu trả lời của bạn.
lzap

1
Tmux là tuyệt vời và tôi đã sử dụng phương pháp này trong một thời gian dài, nhưng nó làm cho việc điều hướng và sao chép và dán giữa hai tệp trở nên khó khăn hơn.
neallred

1
Tôi đã từng làm điều này, nhưng có nhiều bộ đệm vim thì vượt trội hơn khi bạn cần kéo / dán
Titou

3

Tôi sử dụng dòng lệnh và git rất nhiều, vì vậy tôi có bí danh này trong bashrc của mình:

alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"

Điều này sẽ mở từng tệp mới trong một tab mới trên một cửa sổ hiện có và sẽ tạo một cửa sổ cho mỗi kho lưu trữ git. Vì vậy, nếu bạn mở hai tệp từ repo A và 3 tệp từ repo B, bạn sẽ kết thúc với hai cửa sổ, một cho repo A với hai tab và một cho repo B với ba tab.

Nếu tệp bạn đang mở không có trong git repo, nó sẽ chuyển đến một cửa sổ mặc định.

Để chuyển giữa các tab tôi sử dụng các ánh xạ này:

nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>

Để mở nhiều tệp cùng một lúc, bạn nên kết hợp điều này với một trong những giải pháp khác.


3

Tôi sử dụng nhiều bộ đệm được đặt trong ~/.vimrctập tin của tôi .

Kịch bản trình thám hiểm bộ đệm mini cũng rất tuyệt để có được một danh sách nhỏ gọn các bộ đệm của bạn. Sau đó :b1hoặc :b2... để đi đến bộ đệm thích hợp hoặc sử dụng trình thám hiểm bộ đệm mini và tab thông qua bộ đệm.


2

hãy thử bản đồ sau để thuận tiện chỉnh sửa nhiều tệp

"chia cửa sổ

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

" di chuyển xung quanh

nmap <C-j> <C-w>j

nmap <C-k> <C-w>k

nmap <C-l> <C-w>l

nmap <C-h> <C-w>h


2

Tôi đã làm một video rất đơn giản cho thấy quy trình làm việc mà tôi sử dụng. Về cơ bản tôi sử dụng Ctrl-P plugin Vim và tôi đã ánh xạ điều hướng bộ đệm vào phím Enter.

Bằng cách này, tôi có thể nhấn Enter ở chế độ bình thường, xem danh sách các tệp đang mở (hiển thị trong một cửa sổ nhỏ mới ở cuối màn hình), chọn tệp tôi muốn chỉnh sửa và nhấn Enter lần nữa. Để nhanh chóng tìm kiếm thông qua nhiều tệp đang mở, chỉ cần nhập một phần tên tệp, chọn tệp và nhấn Enter.

Tôi không có nhiều tệp được mở trong video, nhưng nó trở nên cực kỳ hữu ích khi bạn bắt đầu có nhiều tệp.

Vì plugin sắp xếp bộ đệm bằng cách sử dụng thứ tự MRU, bạn chỉ cần nhấn Enter hai lần và chuyển đến tệp gần đây nhất mà bạn đang chỉnh sửa.

Sau khi plugin được cài đặt, cấu hình duy nhất bạn cần là:

nmap <CR> :CtrlPBuffer<CR>

Tất nhiên bạn có thể ánh xạ nó tới một khóa khác, nhưng tôi thấy ánh xạ cần nhập rất tiện dụng.


2

Tôi sẽ đề nghị sử dụng plugin

NERDtree

Đây là liên kết github với hướng dẫn.

Nerdtree

Tôi sử dụng vim-plug như một trình quản lý plugin, nhưng bạn cũng có thể sử dụng Vundle.

cắm vim

Vundle


2

Trong tôi và nhiều người dùng vim khác, tùy chọn tốt nhất là,

  • Mở tệp bằng cách sử dụng,

: e file_name.extension

Và sau đó chỉ cần Ctrl + 6 để thay đổi bộ đệm cuối cùng. Hoặc, bạn luôn có thể nhấn

: ls để liệt kê bộ đệm và sau đó thay đổi bộ đệm bằng cách sử dụng b theo sau là số bộ đệm.

  • Chúng tôi thực hiện phân chia dọc hoặc ngang bằng cách sử dụng

: vsp cho phân chia dọc

: sp để phân chia chân trời

Và sau đó <C-W><C-H/K/L/j>để thay đổi sự phân chia làm việc.

Bạn có thể chỉnh sửa bất kỳ tập tin nào trong bất kỳ số lần chia tách nào.


Vui lòng chỉnh sửa câu trả lời của bạn để đảm bảo rằng nó cải thiện các câu trả lời khác đã có trong câu hỏi này.
hongsy

1

Khi tôi bắt đầu sử dụng VIM, tôi đã không nhận ra rằng các tab được cho là được sử dụng như các bố cục cửa sổ khác nhau và bộ đệm đóng vai trò chỉnh sửa / chuyển đổi nhiều tệp với nhau. Trên thực tế, trong các tab ban đầu thậm chí không có trước v7.0 và tôi chỉ mở một VIM bên trong tab thiết bị đầu cuối (hiện tại tôi đang sử dụng gnome-terminal) và chuyển đổi giữa các tab bằng cách sử dụng số alt +, vì tôi nghĩ sử dụng các lệnh như : bộ đệm ,: bn và: bp là quá nhiều đối với tôi. Khi VIM 7.0 được phát hành, tôi thấy việc quản lý nhiều tệp dễ dàng hơn và chuyển sang nó, nhưng gần đây tôi mới nhận ra rằng bộ đệm phải luôn luôn hoạt động, trừ khi có một điều: bạn cần cấu hình nó để làm cho nó hoạt động tốt.

Vì vậy, tôi đã thử vim-air và kích hoạt thanh đệm giống như tab trên đầu, nhưng đồ họa có vấn đề với iTerm2 của tôi, vì vậy tôi đã thử một vài cái khác và có vẻ như MBE hoạt động tốt nhất với tôi. Tôi cũng đặt shift + h / l làm phím tắt, vì các phím tắt (di chuyển đến phần đầu / đuôi của trang hiện tại) không hữu ích cho tôi.

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

Nó dường như thậm chí còn dễ dàng hơn gt và gT và: e cũng dễ hơn: tabnew quá. Tôi thấy: bd không tiện lợi như: q mặc dù (MBE đang gặp một số vấn đề với nó) nhưng tôi có thể sống với tất cả các tệp trong bộ đệm tôi nghĩ.



0

Hầu hết các câu trả lời trong chuỗi này đều sử dụng các lệnh vim đơn giản, điều này tất nhiên là tốt nhưng tôi nghĩ rằng tôi sẽ cung cấp một câu trả lời mở rộng bằng cách sử dụng kết hợp các plugin và chức năng mà tôi thấy đặc biệt hữu ích (ít nhất một số mẹo này đến từ tệp của Gary Bernhardt mẹo điều hướng ):

  1. Để chuyển đổi giữa hai tập tin cuối cùng, chỉ cần nhấn <leader>hai lần. Tôi khuyên bạn nên gán <leader>cho phím cách:

    nnoremap <leader><leader> <c-^>
    
  2. Để nhanh chóng di chuyển xung quanh một dự án, câu trả lời là một giải pháp kết hợp mờ như CtrlP . Tôi ràng buộc nó để <leader>atruy cập nhanh.

  3. Trong trường hợp tôi muốn thấy một đại diện trực quan của bộ đệm hiện đang mở, tôi sử dụng plugin BufExplorer . Đơn giản mà hiệu quả.

  4. Nếu tôi muốn duyệt qua hệ thống tệp, tôi sẽ sử dụng dòng lệnh hoặc tiện ích bên ngoài (Quicklsilver, Afred, v.v.) nhưng để xem cấu trúc dự án hiện tại, NERD Tree là một tác phẩm kinh điển. Không sử dụng điều này mặc dù ở vị trí 2như là phương pháp tìm tệp chính của bạn. Nó sẽ thực sự làm bạn chậm lại. Tôi sử dụng các ràng buộc <leader>ff.

Những thứ này là đủ để tìm và mở tập tin. Từ đó tất nhiên sử dụng phân chia ngang và dọc. Liên quan đến phân chia Tôi thấy các chức năng này đặc biệt hữu ích:

  1. Mở các phần tách mới trong các khu vực nhỏ hơn khi không đủ chỗ và mở rộng chúng khi điều hướng. Tham khảo ở đây để nhận xét về những gì chúng làm chính xác:

    set winwidth=84
    set winheight=5
    set winminheight=5
    set winheight=999
    
    nnoremap <C-w>v :111vs<CR>
    nnoremap <C-w>s :rightbelow split<CR>
    set splitright
    
  2. Chuyển từ tách sang tách dễ dàng:

    nnoremap <C-J> <C-W><C-J>
    nnoremap <C-K> <C-W><C-K>
    nnoremap <C-L> <C-W><C-L>
    nnoremap <C-H> <C-W><C-H>
    

0

Bạn có thể là một người điên tuyệt đối và bí danh vimđể vim -pbằng cách thêm vào của bạn .bashrc:

alias vim="vim -p"

Điều này sẽ dẫn đến việc mở nhiều tệp từ trình bao trong tab, mà không phải gọi :tab balltừ bên trong vim sau đó.

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.