vim退出 - 如何在Vim中有效地處理多個文件?




vim用法 (18)

清單

要查看當前緩衝區的列表,我使用:

:ls

開盤

要打開一個新文件,我使用

:e ../myFile.pl

增強了選項卡的完成(將set wildmenu放入.vimrc )。

注意:您也可以使用:find哪個路徑,但您需要先定制這些路徑。

交換

要在所有打開的文件之間切換,我使用

:b myfile

與增強標籤完成(仍然set wildmenu )。

注意:: :b#選擇上次訪問的文件,因此您可以使用它在兩個文件之間快速切換。

使用Windows

Ctrl-W sCtrl-W v水平和垂直分割當前窗口。 你也可以使用:split:vertical split:sp:vs

Ctrl-W w在打開的窗口間切換, Ctrl-W h (或jkl )在打開的窗口中導航。

Ctrl-W c關閉當前窗口, Ctrl-W o關閉除當前窗口之外的所有窗口。

-o-O標誌啟動vim將打開每個文件在其自己的分割中。

所有這些我都不需要Vim中的標籤,我的手指找到了我的緩衝區,而不​​是我的眼睛。

注意:如果您希望所有文件都轉到Vim的同一個實例,請使用--remote-silent選項啟動Vim。

我開始使用Vim開發Perl腳本,並開始發現它非常強大。

我喜歡的一件事是能夠使用例如vi main.pl maintenance.pl一次打開多個文件,然後在它們之間跳轉:

:n
:prev

並查看打開哪個文件

:args

而要添加一個文件,我可以說:

:n test.pl

我期望的將會被添加到我的文件列表中,但是它會清除我當前的文件列表,並且當我鍵入:args我只打開test.pl

那麼如何將文件添加到我的參數列表並將其刪除?


Vim(但不是原來的Vi!)有我選擇的標籤(在許多情況下)優於緩衝區。 您可以說:tabe [filename]在新選項卡中打開文件。 在選項卡之間循環是通過單擊選項卡或按鍵組合[ n ] gtgT 。 圖形Vim甚至有圖形標籤。


在這個線程中的一些答案建議使用標籤,其他人建議使用緩衝區來完成同樣的事情。 選項卡和緩衝區不同。 我強烈建議你閱讀這篇文章Vim Tab瘋狂 - 緩衝區與製表符

以下是我從文章中獲得的一個很好的總結:

概要:

  • 緩衝區是文件的內存中文本。
  • 窗口是緩衝區上的視口。
  • 一個標籤頁是一個窗口的集合。

如果只使用vim內置命令 ,我看到在多個緩衝區中切換的最好的命令是:

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

它完美地結合了兩個:ls:b命令 - 列出所有打開的緩衝區並等待您輸入命令切換緩衝區。

在vimrc中給出上面的映射,一旦你輸入<Leader>f

  • 顯示所有打開的緩衝區
  • 您可以:
    • 鍵入23進入緩衝區23,
    • 輸入#去替代/ MRU緩衝區,
    • 鍵入文件的部分名稱,然後鍵入<Tab><Ci>自動完成,
    • 或者只是<CR><Esc>留在當前緩衝區中

上述鍵映射的輸出快照是:

: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'

在上面的快照中:

  • 第二列:當前的%a ,隱藏的h ,前一個,空的for,尚未切換到。
  • 第三欄:用於修改。

另外,我強烈建議set hidden 。 請參閱:help 'hidden'


如果您要使用多個緩衝區,我認為最重要的是設置隱藏,這樣即使您在離開的緩存中尚未保存更改,它也可以讓您切換緩衝區。


您可能想要使用Vim全局標記

這樣,您可以快速在文件之間跳動,甚至可以在文件中標記的位置之間跳動。 另外,關鍵命令很簡短: 'C把我帶到了我正在使用的代碼中, 'T帶我參加了我正在使用的單元測試。

當你改變位置時,重置標記也很快: mC標記新的代碼點, mT標記新的測試點。


我使用命令行和git很多,所以我在我的bashrc中有這個別名:

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

這將在現有窗口的新選項卡中打開每個新文件,並為每個git存儲庫創建一個窗口。 因此,如果從repo A打開兩個文件,並從repo B打開3個文件,則最終將顯示兩個窗口,一個用於帶有兩個選項卡的回購A,另一個用於帶有三個選項卡的回購B.

如果您打開的文件不包含在git repo中,它將轉到默認窗口。

要在選項卡之間跳轉,我使用這些映射:

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

要一次打開多個文件,您應該將其與其他解決方案之一結合使用。


我使用緩衝區命令 - :bn (下一個緩衝區) :bp (前一個緩衝區) :buffers (列表打開緩衝區) :b<n> (打開緩衝區n) :bd (刪除緩衝區)。 :e <filename>將會打開一個新的緩衝區。


我想你可能會使用錯誤的命令來查看你打開的文件列表。

試試看:ls查看你打開的文件列表,你會看到:

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

然後您可以通過列出的數字來引用文件,例如:3b

或者你可以通過輸入數字來拆分屏幕,但使用sb而不是b。

另外,%指的是當前可見的文件,#指向備用文件。

您可以通過按Ctrl Shift 6輕鬆切換這兩個文件

編輯:如:ls您可以使用:reg來查看您的寄存器的當前內容,包括包含您已刪除內容的0-9個寄存器。 如果您想重新使用以前刪除的某些文本,這特別有用。


我有效地使用多個文件的方法是使用tmux。

它允許您垂直和水平地拆分窗戶,如下所示:

我在我的Mac和Linux機器上都以這種方式工作,我發現它比在Mac上提供的本地窗口切換機制更好。 我發現切換更容易,只有在使用tmux時,我才能在我的mac上獲得'在同一當前目錄下的新頁面'(儘管似乎有選項可以在同一個目錄中打開新窗格),這是一件令人驚訝的關鍵作品。 當前位置的即時新窗格非常有用。 對於兩個操作系統使用相同的組合鍵的新窗格的方法對我來說是至關重要的,並且為將來的個人兼容性提供所有的獎勵。 除了多個tmux窗格,我還嘗試使用多個選項卡,例如 和多個新窗口,例如 最終我發現多個tmux窗格對我來說是最有用的。 我非常“視覺化”,並且喜歡將我的各種背景放在我面前,作為面板連接在一起。

tmux還支持舊screen沒有的水平和垂直窗格(儘管mac的iterm2似乎支持它,但是同樣,當前目錄設置對我來說不起作用)。 tmux 1.8


我製作了一個非常簡單的視頻,展示了我使用的工作流程。 基本上我使用Ctrl-P Vim插件,並將緩衝區導航映射到Enter鍵。

通過這種方式,我可以在普通模式下按Enter鍵,查看打開的文件列表(顯示在屏幕底部的一個小新窗口中),選擇我想編輯的文件並再次按Enter鍵。 要快速搜索多個打開的文件,只需輸入文件名的一部分,選擇該文件並按Enter鍵。

我沒有在視頻中打開許多文件,但當您開始使用很多文件時,它會變得非常有幫助。

由於插件使用MRU排序對緩衝區進行排序,因此只需按兩次Enter鍵並跳轉到正在編輯的最新文件。

插件安裝後,您需要的唯一配置是:

nmap <CR> :CtrlPBuffer<CR>

當然,你可以將它映射到不同的鍵,但我發現映射進入非常方便。


添加另一個答案,因為這不包含在任何答案中

將所有緩衝區更改為tab視圖。

 :tab sball

將打開所有緩衝區到選項卡視圖。 然後我們可以使用任何標籤相關的命令

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

詳情請參閱:help tab-page-commands

我們可以指示vim打開,作為選項卡視圖,多個文件vim -p file1 file2alias vim='vim -p'將會很有用。
~/.vimrc自動命令也可以實現同樣的功能

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

無論如何要回答這個問題:要添加到arg列表: arga file

從arg列表中刪除: argd pattern

更多at :help arglist


為什麼不使用標籤(在Vim 7中引入)? 您可以使用:tabn:tabp在標籤之間切換:tabn使用:tabe <filepath>您可以添加一個新標籤; 並使用常規:q:wq關閉選項卡。 如果將:tabn:tabp到您的F7 / F8鍵,則可以輕鬆地在文件之間切換。

如果沒有那麼多文件或者你沒有Vim 7,你也可以將你的屏幕分割成多個文件:sp <filepath> 。 然後你可以用Ctrl + W在分屏之間切換,然後在你想要移動的方向上切換一個箭頭鍵(或者代替箭頭鍵, w代表下一代, W代表之前的分隔屏幕)


當在vim中使用多個文件時,我主要使用這些命令(打開大約350個文件):

  • :b <partial filename><tab> (跳轉到緩衝區)
  • :bw (緩衝區擦除,刪除緩衝區)
  • :e <file path> (編輯,打開一個新的緩衝區>
  • pltags - 啟用跳轉到子程序/方法定義

要添加到args列表:

:argadd

args列表中刪除:

:argdelete

在您的示例中,您可以使用:argedit test.pl將test.pl添加到args列表並在一個步驟中編輯該文件。

:help args提供了更多的細節和先進的用法


諸如:e:badd只會接受一個參數,因此以下將失敗

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

如果你想從vim中添加多個文件,請使用arga[dd]

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

這裡有很多答案! 我在沒有重新發明輪子的情況下使用了什麼 - 最著名的插件(即將不會很快死亡並被許多人使用)是超快速和令人討厭的。

  • ctrlpvim / ctrlp.vim - 通過名稱模糊搜索按位置或名稱查找文件
  • jlanzarotta / bufexplorer - 瀏覽打開的緩衝區(當你不記得最近打開和修改了多少文件,你不記得它們在哪裡,可能是因為你用Ag搜索了它們)
  • rking / ag.vim搜索關於gitignore的文件
  • scrooloose / nerdtree查看目錄結構,查看,添加/刪除/修改文件

更新 :最近我使用dyng / ctrlsf.vim來搜索與上下文視圖(如Sublime搜索),我將引擎從ag切換到ripgrep 。 表現非常出色。


:ls

用於打開緩衝區列表

  • :bp前一個緩衝區
  • :bn下一個緩衝區
  • :bn (一個數字)移動到第n個緩衝區
  • :b <filename-part>與提供自動完成的tab-key(真棒!!)

在某些版本的vim中, bnbp實際上分別是bnextbprevious 。 在這種情況下,Tab自動完成功能很有用。

或者當您處於正常模式時,請使用^切換到正在處理的最後一個文件。

另外,您可以保存vim的會話

:mksession! ~/today.ses

上述命令將當前打開的文件緩衝區和設置保存為~/today.ses 。 您可以使用加載該會話

vim -S ~/today.ses

沒有麻煩記住你昨天離開的地方。 ;)





vi