Pi_netrw
Nvim 的 :help
頁面,由 產生,原始碼來自 這裡,並使用 tree-sitter-vimdoc 解析器。
------------------------------------------------ Netrw 參考手冊 作者:Charles E. Campbell ------------------------------------------------ 作者:Charles E. Campbell <
[email protected]> (請先移除 Campbell 電子郵件中的 NOSPAM)
版權:版權 (C) 2017 Charles E. Campbell VIM 授權條款適用於此套件中的檔案,包括 netrw.vim、pi_netrw.txt、netrwFileHandlers.vim、netrwSettings.vim 和 syntax/netrw.vim。如同任何免費軟體,netrw.vim 及其相關檔案以 *現狀* 提供,不提供任何明示或暗示的擔保。不保證適銷性。不保證適用於任何特定用途。使用此插件即表示您同意,在任何情況下,版權持有者均不對因使用此軟體而造成的任何損害負責。使用風險自負!
1. 目錄..............................................|netrw-contents| 2. Netrw 入門...........................................|netrw-start| 3. Netrw 參考..........................................|netrw-ref| 外部應用程式和協定.................................|netrw-externapp| 讀取...............................................|netrw-read| 寫入...............................................|netrw-write| 載入...............................................|netrw-source| 目錄列表...........................................|netrw-dirlist| 變更使用者 ID 和密碼...............................|netrw-chgup| 變數和設定.........................................|netrw-variables| 路徑...............................................|netrw-path| 4. 網路導向檔案傳輸....................................|netrw-xfer| NETRC...............................................|netrw-netrc| 密碼...............................................|netrw-passwd| 5. 啟用...............................................|netrw-activate| 6. 透明遠端檔案編輯...................................|netrw-transparent| 7. Ex 命令............................................|netrw-ex| 8. 變數和選項..........................................|netrw-variables| 9. 瀏覽...............................................|netrw-browse| 瀏覽簡介..........................................|netrw-intro-browse| 快速參考:對應......................................|netrw-browse-maps| 快速參考:命令......................................|netrw-browse-cmds| 橫幅顯示..........................................|netrw-I| 為目錄加入書籤.....................................|netrw-mb| 瀏覽..............................................|netrw-cr| 壓縮目前的樹狀列表目錄..........................|netrw-s-cr| 使用水平分割視窗瀏覽.............................|netrw-o| 使用新分頁瀏覽....................................|netrw-t| 使用垂直分割視窗瀏覽.............................|netrw-v| 變更列表樣式(細、寬、長、樹狀)。...............|netrw-i| 變更為書籤目錄....................................|netrw-gb| 快速隱藏/取消隱藏點檔案.........................|netrw-gh| 變更本機檔案權限.................................|netrw-gp| 變更為前一個目錄.................................|netrw-u| 變更為後一個目錄.................................|netrw-U| 使用特殊處理常式自訂瀏覽.......................|netrw-x| 刪除書籤..........................................|netrw-mB| 刪除檔案或目錄....................................|netrw-D| 目錄探索命令......................................|netrw-explore| 使用星號和模式探索...............................|netrw-star| 顯示檔案資訊......................................|netrw-qf| 編輯檔案或目錄隱藏列表...........................|netrw-ctrl-h| 編輯排序順序......................................|netrw-S| 強制處理為檔案或目錄...........................|netrw-gd|
netrw-gf 上層目錄...........................................|netrw--| 隱藏檔案或目錄....................................|netrw-a| 改善瀏覽..........................................|netrw-ssh-hack| 列出書籤和歷史紀錄..............................|netrw-qb| 建立新目錄........................................|netrw-d| 將瀏覽目錄設為目前目錄...........................|netrw-cd| 標記檔案..........................................|netrw-mf| 取消標記檔案....................................|netrw-mF| 依位置列表標記檔案...............................|netrw-qL| 依快速修復列表標記檔案...........................|netrw-qF| 依正規表示式標記檔案.............................|netrw-mr| 標記檔案:任意 Shell 命令........................|netrw-mx| 標記檔案:任意 Shell 命令,整批處理............|netrw-mX| 標記檔案:任意 Vim 命令..........................|netrw-mv| 標記檔案:引數列表...............................|netrw-ma|
netrw-mA 標記檔案:緩衝區列表.............................|netrw-cb|
netrw-cB 標記檔案:壓縮和解壓縮.........................|netrw-mz| 標記檔案:複製....................................|netrw-mc| 標記檔案:Diff.....................................|netrw-md| 標記檔案:編輯....................................|netrw-me| 標記檔案:Grep....................................|netrw-mg| 標記檔案:依後綴隱藏和取消隱藏...............|netrw-mh| 標記檔案:移動....................................|netrw-mm| 標記檔案:載入....................................|netrw-ms| 標記檔案:設定目標目錄...........................|netrw-mt| 標記檔案:標籤....................................|netrw-mT| 標記檔案:使用書籤設定目標目錄.................|netrw-Tb| 標記檔案:使用歷史紀錄設定目標目錄.............|netrw-Th| 標記檔案:取消標記...............................|netrw-mu| Netrw 瀏覽器變數...................................|netrw-browser-var| Netrw 瀏覽和選項不相容性.........................|netrw-incompatible| Netrw 設定視窗....................................|netrw-settings-window| 取得檔案..........................................|netrw-O| 預覽視窗..........................................|netrw-p| 前一個視窗........................................|netrw-P| 重新整理列表.....................................|netrw-ctrl-l| 反轉排序順序......................................|netrw-r| 重新命名檔案或目錄...............................|netrw-R| 選擇排序樣式......................................|netrw-s| 設定編輯視窗......................................|netrw-C| 10. 問題和修正..........................................|netrw-problems| 11. 偵錯 Netrw 本身......................................|netrw-debug| 12. 歷史紀錄.............................................|netrw-history| 13. 待辦事項.............................................|netrw-todo| 14. 貢獻者.............................................|netrw-credits|
Netrw 讓讀取檔案、寫入檔案、在網路上瀏覽和本機瀏覽變得輕鬆!首先,請確認您已啟用插件,因此您至少需要在您的 <.vimrc> 中加入以下內容:(或參閱
netrw-activate)
set nocp " 'compatible' is not set
filetype plugin on " plugins are enabled
Netrw 支援使用 URL 「透明」編輯其他機器上的檔案(請參閱
netrw-transparent)。舉例來說,假設您在其他機器上有一個帳戶;如果您可以使用 scp,請嘗試
vim scp://hostname/path/to/file
那麼,如果您有 ftp,而不是 ssh/scp 呢?也很容易;請嘗試
vim ftp://hostname/path/to/file
想讓 ftp 更容易使用嗎?請看看您的 ftp 是否支援名為
.netrc> 的檔案 -- 通常它會放在您的家目錄中,只有使用者擁有讀/寫權限(也就是說,不是群組、全域或其他),並且有類似以下內容的行
machine HOSTNAME login USERID password "PASSWORD"
machine HOSTNAME login USERID password "PASSWORD"
...
default login USERID password "PASSWORD"
Windows 的 ftp 不支援 .netrc;不過,可以在 .vimrc 中加入
let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\MyUserName\MACHINE'
Netrw 會從它嘗試開啟的 URL 中,將主機的機器名稱替換為「MACHINE」,因此可以為每個網站指定
userid
password
在個別的檔案中:c:\Users\MyUserName\MachineName。
現在談談瀏覽 -- 當您只想在編輯檔案之前四處看看時。若要在您目前的主機上瀏覽,只需「編輯」一個目錄
vim .
vim /home/userid/path
若要在遠端主機上瀏覽,請「編輯」一個目錄(但請確定目錄名稱後面接著「/」)
vim scp://hostname/
vim ftp://hostname/path/to/dir/
netrw 支援的不只 scp 和 ftp 協定:請參閱下一節,
netrw-externapp,了解如何使用這些外部應用程式與 netrw 和 vim。
如果您想使用插件,但由於某些原因不想使用 netrw,那麼您需要避免載入 netrw 的插件部分和自動載入部分。您可以在 <.vimrc> 中加入以下兩行來執行此操作
:let g:loaded_netrw = 1
:let g:loaded_netrwPlugin = 1
除了
netrw-start 中提到的 scp 和 ftp 之外,Netrw 還支援數種協定。這些包括 dav、fetch、http... 好吧,直接查看
netrw-externapp 中的清單即可。每個協定都與一個變數相關聯,該變數保存支援該協定的預設命令。
g:netrw_http_xcmd:
http://.. 的選項字串。協定透過此變數指定,且可以獨立覆寫。依預設,http 處理命令的選項引數為
elinks : "-source >"
links : "-dump >"
curl : "-L -o"
wget : "-q -O"
fetch : "-o"
例如,如果您的系統有 elinks,並且您希望使用嘗試呈現文字的方式來查看頁面,您可能會希望在 .vimrc 中加入
let g:netrw_http_xcmd= "-dump >"
在您的 .vimrc 中加入。
g:netrw_http_put_cmd:此選項同時指定可執行檔和任何需要的選項。此命令會對 URL 執行 PUT 操作。
一般來說,可以使用具有正常編輯命令的 URL 表示法,例如
:e ftp://[user@]machine/path
Netrw 也提供 Nread 命令
:Nread ? 提供協助 :Nread "machine:path" 使用 rcp :Nread "machine path" 使用帶有 <.netrc> 的 ftp :Nread "machine id password path" 使用 ftp :Nread "dav://machine[:port]/path" 使用 cadaver :Nread "fetch://[user@]machine/path" 使用 fetch :Nread "ftp://[user@]machine[[:#]port]/path" 使用帶有 <.netrc> 的 ftp :Nread "http://[user@]machine/path" 使用 http 使用 wget :Nread "rcp://[user@]machine/path" 使用 rcp :Nread "rsync://[user@]machine[:port]/path" 使用 rsync :Nread "scp://[user@]machine[[:#]port]/path" 使用 scp :Nread "sftp://[user@]machine/path" 使用 sftp
可以使用具有正常檔案寫入命令的 URL 表示法,例如
:w ftp://[user@]machine/path
Netrw 也提供 Nwrite 命令
:Nwrite ? 顯示說明 :Nwrite "machine:path" 使用 rcp :Nwrite "machine path" 使用 ftp 並搭配 <.netrc> :Nwrite "machine id password path" 使用 ftp :Nwrite "dav://machine[:port]/path" 使用 cadaver :Nwrite "ftp://[user@]machine[[:#]port]/path" 使用 ftp 並搭配 <.netrc> :Nwrite "rcp://[user@]machine/path" 使用 rcp :Nwrite "rsync://[user@]machine[:port]/path" 使用 rsync :Nwrite "scp://[user@]machine[[:#]port]/path" 使用 scp :Nwrite "sftp://[user@]machine/path" 使用 sftp http: 不支援!
可以使用 URL 表示法搭配正常的檔案來源命令,例如:
:so ftp://[user@]machine/path
Netrw 也提供 Nsource 命令
:Nsource ? 顯示說明 :Nsource "dav://machine[:port]/path" 使用 cadaver :Nsource "fetch://[user@]machine/path" 使用 fetch :Nsource "ftp://[user@]machine[[:#]port]/path" 使用 ftp 並搭配 <.netrc> :Nsource "http://[user@]machine/path" 使用 http 使用 wget :Nsource "rcp://[user@]machine/path" 使用 rcp :Nsource "rsync://[user@]machine[:port]/path" 使用 rsync :Nsource "scp://[user@]machine[[:#]port]/path" 使用 scp :Nsource "sftp://[user@]machine/path" 使用 sftp
可以透過嘗試編輯目錄來瀏覽並取得目錄列表
:e scp://[user]@hostname/path/
:e ftp://[user]@hostname/path/
對於遠端目錄列表(即使用 scp 或 ftp 的情況),尾部的 "/" 是必要的 (斜線會告訴 netrw 將參數視為要瀏覽的目錄,而不是要下載的檔案)。
Nread 命令也可以用來達成此目的(同樣地,尾部的斜線是必要的)
:Nread [protocol]://[user]@hostname/path/
:NetUserPass [uid [password]] -- 根據需要提示 :call NetUserPass() -- 提示輸入 uid 和密碼 :call NetUserPass("uid") -- 提示輸入密碼 :call NetUserPass("uid","password") -- 設定全域 uid 和密碼
g:Netrw_funcref 指定在 netrw 編輯檔案時要呼叫的函式(或多個函式)。檔案會先被編輯,然後呼叫函式參考 (
Funcref)。此變數也可以保存一個函式參考的
清單。(預設)未定義。(g:Netrw... 中的大寫字母是為了保存函式參考所必需的)
Example: place in .vimrc; affects all file opening
fun! MyFuncRef()
endfun
let g:Netrw_funcref= function("MyFuncRef")
g:netrw_ftp 如果不存在,則使用預設 ftp =0 使用預設 ftp (uid password) =1 使用替代 ftp 方法 (user uid password) 如果您在使用 ftp 時遇到問題,請嘗試變更此變數的值,以查看替代 ftp 方法是否適用於您的設定。
g:netrw_ftp_options 預設選擇,這些選項應該會關閉互動式提示,並阻止 ftp 在初始連線時嘗試自動登入。然而,似乎並非所有 ftp 實作都支援此功能(例如 ncftp)。 ="-i -n"
預設值:不存在。如果此變數存在,則其中包含的任何字串都會放入設定給您 ftp 用戶端的命令中。例如:="passive"
g:netrw_ignorenetrc =0(linux、cygwin 的預設值)=1 如果您有 <.netrc> 檔案,但它無法運作,並且您希望忽略它,請按照顯示的方式設定此變數。(Windows + cmd.exe 的預設值)
=0 停用 netrw 的選單 =1(預設)啟用 netrw 的選單
g:netrw_use_errorwindow =2:來自 netrw 的訊息將使用快顯視窗。移動滑鼠並暫停以移除快顯視窗。=1:來自 netrw 的訊息將使用單獨的一行視窗。此視窗可可靠傳遞訊息。=0:(預設)來自 netrw 的訊息將使用 echoerr;訊息似乎不一定會以這種方式顯示,但使用者不需要關閉視窗。
g:netrw_cygwin =1 假設 windows 下的 scp 來自 cygwin。也允許網路瀏覽使用具有時間和大小排序的 ls(windows 的預設值)=0 假設 Windows 的 scp 接受 windows 樣式的路徑。網路瀏覽使用 dir 而不是 ls。如果您正在使用 unix,則會忽略此選項
大多數協定的檔案路徑通常是相對於使用者目錄的。但是,有些協定可能會使路徑相對於某些相關目錄。
example: vim scp://user@host/somefile
example: vim scp://user@host/subdir1/subdir2/somefile
其中 "somefile" 位於 "user" 的主目錄中。如果您希望使用根目錄相關路徑取得檔案,請使用完整路徑
example: vim scp://user@host//somefile
example: vim scp://user@host//subdir1/subdir2/somefile
Vim 下的網路導向檔案傳輸是由使用外掛程式技術的 vim 指令碼 (<netrw.vim>) 所實作。它目前支援使用 rcp、scp、ftp 或 ftp+<.netrc>、scp、fetch、dav/cadaver、rsync 或 sftp 在網路上讀取和寫入。
目前僅支援透過使用 wget 或 fetch 唯讀 http。
<netrw.vim> 是一個標準外掛程式,充當 Vim 和各種檔案傳輸程式之間的黏合劑。它使用自動命令事件(BufReadCmd、FileReadCmd、BufWriteCmd)來攔截使用類似 URL 的檔案名稱的讀/寫。
ex. vim ftp://hostname/path/to/file
冒號前的字元指定要使用的協定;在範例中,它是 ftp。然後 <netrw.vim> 指令碼會制定一個命令或一系列命令(通常是 ftp),並將其發送到外部程式(ftp、scp 等),該程式執行實際的檔案傳輸/協定。檔案會從/寫入臨時檔案(在 Unix/Linux 下,/tmp/...),而 <netrw.vim> 指令碼會清除該檔案。
現在,關於 Jan Minář 的「FTP 使用者名稱和密碼洩漏」:首先,ftp 不是安全的協定。使用者名稱和密碼會「以明文」在網際網路上傳輸;任何窺探工具都可以擷取這些資訊;這不是 netrw 的問題,而是 ftp 的問題。如果您對此感到擔憂,請嘗試改用 scp 或 sftp。
Netrw 會在同一個 vim 工作階段中,並且只要遠端主機名稱保持不變,就會重複使用使用者 ID 和密碼。
Jan 對於 netrw 如何處理 ftp 似乎有些困惑;通常會在一個「ftp 工作階段」中執行多個命令,而他似乎認為 uid/密碼應該只在一個 ftp 工作階段中保留。但是,netrw 會在不同的「ftp 工作階段」中執行每個 ftp 操作;因此,僅記住一個「ftp 工作階段」的 uid/密碼,與根本不記住 uid/密碼是一樣的。IMHO 舉例來說,當您瀏覽遠端目錄時,這會很快變得令人厭煩。
另一方面,感謝 Jan M. 指出 netrw(和 vim 本身)在處理「精心製作」的檔案名稱時所存在的許多漏洞。Bram Moolenaar 編寫了
shellescape() 和
fnameescape() 函式以回應這些問題,而 netrw 已被修改為使用它們。儘管如此,我的建議是,如果「檔案名稱」看起來像是您不希望執行的 vim 命令,請不要開啟它。
netrw-putty netrw-pscp netrw-psftp 可以透過設定變數來修改任何協定的實作外部應用程式(例如,scp 使用變數 g:netrw_scp_cmd,預設為 "scp -q")。舉例來說,請考慮使用 PuTTY
let g:netrw_scp_cmd = '"c:\Program Files\PuTTY\pscp.exe" -q -batch'
let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
(注意:據回報,Windows 7 使用 PuTTY v0.6 的 "-batch" 選項會失效,因此在該系統上最好將其關閉)
FTP 是一個古老的協定,似乎受到許多實作的青睞。不幸的是,某些實作會產生雜訊(也就是說,在檔案末尾添加垃圾資料)。因此,擔心的使用者可能會決定編寫一個 `NetReadFixup()` 函數,以在透過 FTP 讀取後進行清理。某些 Unix 系統(例如 FreeBSD)提供了一個名為 "fetch" 的工具,它使用 FTP 協定,但不會產生雜訊,而且實際上更方便 <netrw.vim> 使用。因此,如果 "fetch" 可用(即為可執行檔),則最好將其用於基於 `ftp://...` 的傳輸。
對於 rcp、scp、sftp 和 http,可以透明地使用面向網路的檔案傳輸;例如:
vim rcp://[user@]machine/path
vim scp://[user@]machine/path
如果您的 FTP 支援 <.netrc>,則如果該檔案中存在所需的主機名稱、使用者 ID 和密碼三元組,也可以透明地使用。但是,您的 FTP 必須能夠自行使用 <.netrc> 檔案。
vim ftp://[user@]machine[[:#]portnumber]/path
Windows 提供一個 FTP (通常是 c:\Windows\System32\ftp.exe),它使用選項 -s:filename (filename 可以並且可能應該是完整路徑),其中包含 FTP 命令,這些命令會在 FTP 啟動時自動執行。您可以使用此功能為一個站點輸入使用者和密碼。
userid
password
netrw-windows-netrc netrw-windows-s 如果
g:netrw_ftp_cmd 包含 -s:[path/]MACHINE,則 (僅在 Windows 電腦上) netrw 會將目前針對 FTP 連線請求的機器名稱替換為 MACHINE。因此,您可以擁有包含 FTP 登入和密碼的多個 machine.ftp 檔案。範例:
let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE'
vim ftp://myhost.somewhere.net/
將會使用檔案
C:\Users\Myself\myhost.ftp
通常,FTP 會需要查詢使用者以取得使用者 ID 和密碼。後者將會「靜默」完成;也就是說,會顯示星號而不是實際輸入的密碼。Netrw 會保留最近一次傳輸的使用者 ID 和密碼,以便後續與該機器的傳輸 (讀取/寫入) 無需額外提示即可進行。
netrw-urls +=================================+============================+============+ | 讀取 | 寫入 | 使用 | +=================================+============================+============+ | DAV: | | | | dav://host/path | | cadaver | | :Nread dav://host/path | :Nwrite dav://host/path | cadaver | +---------------------------------+----------------------------+------------+ | DAV + SSL: | | | | davs://host/path | | cadaver | | :Nread davs://host/path | :Nwrite davs://host/path | cadaver | +---------------------------------+----------------------------+------------+ | FETCH: | | | | fetch://[user@]host/path | | | | fetch://[user@]host:http/path | 無法使用 | fetch | | :Nread fetch://[user@]host/path| | | +---------------------------------+----------------------------+------------+ | FILE: | | | | file:///* | file:///* | | | file://127.0.0.1/* | file://127.0.0.1/* | | +---------------------------------+----------------------------+------------+ | FTP: (*3) | (*3) | | | ftp://[user@]host/path | ftp://[user@]host/path | ftp (*2) | | :Nread ftp://host/path | :Nwrite ftp://host/path | ftp+.netrc | | :Nread host path | :Nwrite host path | ftp+.netrc | | :Nread host uid pass path | :Nwrite host uid pass path | ftp | +---------------------------------+----------------------------+------------+ | HTTP: wget 是可執行檔: (*4) | | | |
http://[user@]host/path | 無法使用 | wget | +---------------------------------+----------------------------+------------+ | HTTP: fetch 是可執行檔 (*4) | | | |
http://[user@]host/path | 無法使用 | fetch | +---------------------------------+----------------------------+------------+ | RCP: | | | | rcp://[user@]host/path | rcp://[user@]host/path | rcp | +---------------------------------+----------------------------+------------+ | RSYNC: | | | | rsync://[user@]host/path | rsync://[user@]host/path | rsync | | :Nread rsync://host/path | :Nwrite rsync://host/path | rsync | | :Nread rcp://host/path | :Nwrite rcp://host/path | rcp | +---------------------------------+----------------------------+------------+ | SCP: | | | | scp://[user@]host/path | scp://[user@]host/path | scp | | :Nread scp://host/path | :Nwrite scp://host/path | scp (*1) | +---------------------------------+----------------------------+------------+ | SFTP: | | | | sftp://[user@]host/path | sftp://[user@]host/path | sftp | | :Nread sftp://host/path | :Nwrite sftp://host/path | sftp (*1) | +=================================+============================+============+
(*1) 若為絕對路徑,請使用 scp://machine//path。
(*2) 如果存在 <.netrc>,則假設它將與您的 FTP 用戶端搭配使用。否則,指令碼會提示輸入使用者 ID 和密碼。
(*3) 對於 FTP,「machine」可以是 machine#port 或 machine:port,如果需要與標準 FTP 連接埠不同的連接埠。
(*4) 對於
http:...,如果 wget 可用,則會使用它。否則,如果 fetch 可用,則會使用它。
`:Nread` 和 `:Nwrite` ex 命令都可以接受多個檔案名稱。
<.netrc> 檔案,通常位於您的主目錄中,其中包含將主機名稱 (機器名稱) 對應到您偏好使用的使用者 ID 和密碼的行。
下面顯示了 <.netrc> 檔案中各行的典型語法。Unix 下的 FTP 通常支援 <.netrc>;Windows 下的 FTP 通常不支援。
machine {full machine name} login {user-id} password "{password}"
default login {user-id} password "{password}"
您的 FTP 用戶端必須自行處理 <.netrc> 的使用,但如果
<.netrc> 檔案存在,則 FTP 傳輸不會要求使用者 ID 或密碼。
注意:由於此檔案包含密碼,請務必確保沒有其他人可以讀取此檔案!大多數程式會拒絕使用其他人可以讀取的 .netrc。別忘了系統管理員仍然可以讀取該檔案!例如,對於 Linux/Unix:`chmod 600 .netrc`
不幸的是,netrw 似乎沒有辦法將密碼饋送給 scp。因此,透過 scp 的每次傳輸都需要重新輸入密碼。但是,
netrw-ssh-hack 可以協助解決此問題。
只要啟用 Vim 的
'nocompatible' 模式,預設即可使用面向網路的檔案傳輸。Netrw 的指令碼檔案位於您系統的 plugin、autoload 和 syntax 目錄中;僅當您啟動 vim 時,才會自動載入 plugin/netrwPlugin.vim 指令碼。autoload/netrw.vim 中的主要指令碼僅在您實際使用 netrw 時才會載入。我建議,您至少在 <.vimrc> 自訂檔案中加入以下內容:
set nocp
if version >= 600
filetype plugin indent on
endif
透過在 .vimrc 中加入以下幾行,您可以在使用 [g]vim 時不帶任何檔案名稱的情況下立即啟用 netrw,並顯示目前目錄:
" Augroup VimStartup:
augroup VimStartup
au!
au VimEnter * if expand("%") == "" | e . | endif
augroup END
支援一般的讀取/寫入命令。還有一些其他可用的命令。通常,您不需要使用
netrw-transparent 中顯示的 Nwrite 或 Nread (也就是說,只需使用
:e URL
:r URL
:w URL
即可,視情況而定) -- 請參閱
netrw-urls。在下面的說明中,`{netfile}` 是遠端檔案的 URL。
:[range]Nw[rite] {netfile}
[{netfile}
]... 將指定的行寫入 {netfile}
。
:Nr[ead] {netfile}
{netfile}
... 在目前行後讀取 {netfile}
。
:Nsource :Ns :Ns[ource]
{netfile}
來源
{netfile}
。若要使用遠端 .vimrc 啟動 vim,可以使用以下內容 (全部在一行中) (感謝 Antoine Mechelynck):
vim -u NORC -N
--cmd "runtime plugin/netrwPlugin.vim"
--cmd "source scp://HOSTNAME/.vimrc"
:call NetUserPass("userid") 此呼叫會設定 g:netrw_uid,如果密碼不存在,則會查詢使用者以取得它。(相關:
netrw-userpass)
:call NetUserPass("userid","passwd") 此呼叫會設定 g:netrw_uid 和 s:netrw_passwd。使用者 ID 和密碼由 FTP 傳輸使用。您可以使用空字串 (即 "") 有效地移除使用者 ID 和密碼。(相關:
netrw-userpass)
<netrw.vim> 指令碼提供數個變數作為選項,以影響 <netrw.vim> 的檔案傳輸行為。這些變數通常可以在使用者的 <.vimrc> 檔案中設定:(另請參閱
netrw-settings netrw-protocol)
netrw-options
-------------
Netrw Options
-------------
Option Meaning
-------------- -----------------------------------------------
b:netrw_col 在 NetWrite 期間保留目前游標位置 g:netrw_cygwin =1 假設 Windows 下的 scp 來自 cygwin (預設/windows) =0 假設 Windows 下的 scp 接受 Windows 樣式的路徑 (預設/其他) g:netrw_ftp =0 使用預設 FTP (uid 密碼) g:netrw_ftpmode ="binary" (預設) ="ascii" (您的選擇) g:netrw_ignorenetrc =1 (預設) 如果您有 <.netrc> 檔案,但您不希望使用它,則請設定此變數。它的存在足以使 <.netrc> 被忽略。b:netrw_lastfile 保留最新的方法/機器/路徑。b:netrw_line 在 NetWrite 期間保留目前行號 g:netrw_silent =0 正常完成傳輸 =1 靜默完成傳輸 g:netrw_uid 保留目前 FTP 的使用者 ID。g:netrw_use_nt_rcp =0 不使用 WinNT/2K/XP 的 rcp (預設) =1 使用 WinNT/2K/XP 的 rcp、二進位模式 -----------------------------------------------------------------------
netrw-internal-variables 指令碼也會在內部使用下列變數,儘管是暫時的。
-------------------
Temporary Variables
-------------------
Variable Meaning
-------- ------------------------------------
b:netrw_method 指示 rcp/ftp+.netrc/ftp 的索引 w:netrw_method (與 b:netrw_method 相同) g:netrw_machine 保留從輸入中剖析的機器名稱 b:netrw_fname 保留正在存取的檔案名稱
------------------------------------------------------------
Netrw 支援多個協定。這些協定是使用下列列出的變數叫用,並且可以由使用者修改。
------------------------
Protocol Control Options
------------------------
Option Type Setting Meaning
--------- -------- -------------- ---------------------------
netrw_ftp 變數 = 不存在 userid 由 "user userid" 設定 =0 userid 由 "user userid" 設定 =1 userid 由 "userid" 設定 NetReadFixup 函式 = 不存在 無變更 = 存在 允許使用者透過 ftp 自動轉換檔案,並透過 NetReadFixup() 執行 g:netrw_dav_cmd 變數 ="cadaver" 如果 cadaver 是可執行的 g:netrw_dav_cmd 變數 ="curl -o" 如果 curl 是可執行的 g:netrw_fetch_cmd 變數 ="fetch -o" 如果 fetch 可用 g:netrw_ftp_cmd 變數 ="ftp" g:netrw_http_cmd 變數 ="fetch -o" 如果 fetch 可用 g:netrw_http_cmd 變數 ="wget -O" 如果 wget 可用 g:netrw_http_put_cmd 變數 ="curl -T"
g:netrw_list_cmd 變數 ="ssh USEPORT HOSTNAME ls -Fa" g:netrw_rcp_cmd 變數 ="rcp" g:netrw_rsync_cmd 變數 ="rsync"
g:netrw_rsync_sep 變數 ="/" 用於分隔主機名稱和檔案規格 g:netrw_scp_cmd 變數 ="scp -q" g:netrw_sftp_cmd 變數 ="sftp"
-------------------------------------------------------------------------
對於 ftp,netrw 通常會在臨時檔案中建立以下格式的行
IF g:netrw_ftp !exists or is not 1 IF g:netrw_ftp exists and is 1
---------------------------------- ------------------------------
open machine [port] open machine [port] user userid password userid password [g:netrw_ftpmode] password [g:netrw_ftpextracmd] [g:netrw_ftpmode] get filename tempfile [g:netrw_extracmd] get filename tempfile
---------------------------------------------------------------------
然後,Netrw 會使用過濾器執行上述行
:%! {g:netrw_ftp_cmd} -i [-n]
其中 g:netrw_ftp_cmd 通常是 "ftp",-i 告知 ftp 不要互動,-n 表示不要使用 netrc,用於方法 #3 (ftp 無 <.netrc>)
如果 <.netrc> 存在,它將用於避免必須查詢使用者的 userid 和密碼。傳輸的檔案會放入臨時檔案中。然後將臨時檔案讀入請求它的主要編輯視窗,並刪除臨時檔案。
如果您的 ftp 不接受 "user" 命令,並且立即要求提供 userid,請嘗試在您的 <.vimrc> 中放入 "let netrw_ftp=1"。
netrw-cadaver 為了處理不受信任伺服器的 SSL 憑證對話,可以下載憑證並將其放置在 /usr/ssl/cert.pem 中。此操作會將伺服器處理為「信任」。
netrw-fixup netreadfixup 如果您的 ftp 出於任何原因產生不需要的行(例如 AUTH 訊息),您可以編寫一個 NetReadFixup() 函式
function! NetReadFixup(method,line1,line2)
" a:line1: first new line in current file
" a:line2: last new line in current file
if a:method == 1 "rcp
elseif a:method == 2 "ftp + <.netrc>
elseif a:method == 3 "ftp + machine,uid,password,filename
elseif a:method == 4 "scp
elseif a:method == 5 "http/wget
elseif a:method == 6 "dav/cadaver
elseif a:method == 7 "rsync
elseif a:method == 8 "fetch
elseif a:method == 9 "sftp
else " complain
endif
endfunction
> 如果 NetReadFixup() 函式存在,將會被呼叫,因此您可以自訂讀取流程。
Netrw 支援瀏覽本機系統和遠端主機上的目錄;瀏覽包括列出檔案和目錄、進入目錄、編輯其中的檔案、刪除檔案/目錄、建立新目錄、移動(重新命名)檔案和目錄、複製檔案和目錄等等。可以標記檔案並對其執行任何系統命令!Netrw 瀏覽器通常會為遠端目錄實作先前的 explorer 的映射和命令,儘管細節(例如相關的全域變數名稱)必然有所不同。若要瀏覽目錄,只需「編輯」它即可!
vim /your/directory/
vim .
vim c:\your\directory\
Netrw 遠端檔案和目錄瀏覽器處理兩種協定:ssh 和 ftp。如果 URL 中的協定是 ftp,則會導致 netrw 也在其遠端瀏覽中使用 ftp。指定任何其他協定將會導致它用於檔案傳輸;但 ssh 協定將用於執行遠端瀏覽。
若要使用 Netrw 的遠端目錄瀏覽器,只需嘗試讀取帶有尾部斜線的「檔案」,它將被解釋為列出目錄的請求
vim [protocol]://[user@]hostname/path/
其中 [協定] 通常是 scp 或 ftp。例如,嘗試
vim ftp://ftp.home.vim.org/pub/vim/
對於本機目錄,不需要尾部斜線。再次強調,因為很容易錯過:若要瀏覽遠端目錄,URL 必須以斜線結尾!
您可以執行幾項操作來影響瀏覽器顯示檔案的方式
* 按 s 依名稱、時間或大小排序檔案。
目錄:/ 可執行檔:* fifo:| 連結:@ sockets:=
(使用 ctrl-] 選擇主題)~ 瀏覽簡介................................|netrw-intro-browse| 快速參考:映射..............................|netrw-quickmap| 快速參考:命令............................|netrw-browse-cmds| 隱藏 編輯隱藏清單................................|netrw-ctrl-h| 隱藏檔案或目錄.........................|netrw-a| 依後綴隱藏/顯示.........................|netrw-mh| 隱藏點檔案..............................|netrw-gh| 清單樣式 選擇清單樣式 (thin/long/wide/tree)....|netrw-i| 相關設定變數...........................|g:netrw_liststyle| 用於執行清單的 Shell 命令................|g:netrw_list_cmd| 快速檔案資訊............................|netrw-qf| 排序方式 選擇排序樣式 (名稱/時間/大小).........|netrw-s| 編輯排序序列...........................|netrw-S| 排序選項................................|g:netrw_sort_options| 相關設定變數...........................|g:netrw_sort_sequence| 反向排序順序.............................|netrw-r|
netrw-quickcom netrw-quickcoms 快速參考:命令
netrw-explore-cmds netrw-browse-cmds {{{2 :NetrwClean[!]............................................|netrw-clean| :NetrwSettings............................................|netrw-settings| :Ntree....................................................|netrw-ntree| :Explore[!] [dir] 瀏覽目前檔案的目錄......|netrw-explore| :Hexplore[!] [dir] 水平分割並瀏覽.............|netrw-explore| :Lexplore[!] [dir] 左側瀏覽器切換...................|netrw-explore| :Nexplore[!] [dir] 垂直分割並瀏覽...............|netrw-explore| :Pexplore[!] [dir] 垂直分割並瀏覽...............|netrw-explore| :Rexplore 返回瀏覽器.....................|netrw-explore| :Sexplore[!] [dir] 分割並瀏覽目錄 .............|netrw-explore| :Texplore[!] [dir] 標籤頁並瀏覽..........................|netrw-explore| :Vexplore[!] [dir] 垂直分割並瀏覽...............|netrw-explore|
可以按 "I" 切換橫幅的顯示。
如果存在標記的檔案和/或目錄,mb 將會將它們加入書籤清單。
netrw-:NetrwMB 此外,可以使用 :NetrwMB 將檔案或目錄加入書籤。
:NetrwMB[!] [files/directories]
無驚嘆號:將檔案/目錄輸入 Netrw 的書籤系統
無引數且在 netrw 緩衝區中:如果存在標記的檔案:將標記的檔案加入書籤,否則:將游標下的檔案/目錄加入書籤 無引數且不在 netrw 緩衝區中:將目前開啟的檔案加入書籤 有引數:
glob() 每個引數並將它們加入書籤
有驚嘆號:從 Netrw 的書籤系統中刪除檔案/目錄
:NetrwMB 命令可在 netrw 緩衝區之外使用 (一旦在工作階段中叫用 netrw)。
檔案 ".netrwbook" 在 netrw (和 vim) 未啟用時保留書籤。預設情況下,它儲存在使用者
'runtimepath' 中的第一個目錄。
瀏覽很簡單:將游標移動到感興趣的檔案或目錄上。按下 <cr>
(返回鍵) 將會選取該檔案或目錄。目錄本身會被列出,而檔案會使用原始讀取要求中提供的協定開啟。
注意事項:有四種清單格式 (請參閱
netrw-i)。對於長和寬清單格式,Netrw 假設兩個或多個空格會分隔檔案名稱和目錄名稱。因此,如果您的檔案名稱或目錄名稱中嵌入了兩個或多個連續空格,或有任何尾隨空格,則您需要使用「精簡」格式來選取它。
預設值為零的
g:netrw_browse_split 選項,可用於讓檔案在新視窗或標籤頁中開啟,而不是預設設定。當選項為 1 或 2 時,分割會分別以水平或垂直方式進行。當選項設定為 3 時,按下
<cr>
將會讓檔案在新標籤頁中顯示。
使用 GUI (gvim) 時,可以按下 <leftmouse>
按鈕來選取檔案。此外,如果
*
g:netrw_retmap == 1 (其預設值為 0) 且 * 在 netrw 選取的檔案中,並且 * 使用者在載入 netrw 之前沒有定義
<2-leftmouse>
的對應
則雙擊滑鼠左鍵將返回 netrw 瀏覽器視窗。
Netrw 嘗試加快瀏覽速度,特別是對於可能需要輸入密碼的遠端瀏覽,方法是保留和重複使用先前取得的目錄清單緩衝區。
g:netrw_fastbrowse 變數用於控制此行為;可以選擇慢速瀏覽 (不重複使用緩衝區)、中速瀏覽 (僅針對遠端目錄重複使用目錄緩衝區清單) 和快速瀏覽 (盡可能經常重複使用目錄緩衝區清單)。這種重複使用的代價是,當變更發生時 (例如將新檔案引入目錄時),清單可能會過時。可以隨時按下 ctrl-L (請參閱
netrw-ctrl-l) 重新整理目錄清單緩衝區。
當啟用樹狀列表樣式(請參閱
netrw-i)且使用 gvim 時,可以使用
<s-cr>
映射來擠壓(關閉)目前游標所在的目錄。
否則,您可以重新映射您選擇的按鍵組合來達到此效果。
nmap <buffer> <silent> <nowait> YOURKEYCOMBO <Plug>NetrwTreeSqueeze
將此行放入 $HOME/ftplugin/netrw/netrw.vim;它需要僅為 netrw 緩衝區產生。
通常,使用
<cr>
進入檔案或目錄。但是,「o」映射允許您開啟一個新視窗來容納新的目錄列表或檔案。會使用水平分割。(對於垂直分割,請參閱
netrw-v)
通常,o 鍵會水平分割視窗,新視窗和游標會在上方。
通常,使用 <cr>
進入檔案或目錄。「t」映射允許您開啟一個新視窗,在新分頁中容納新的目錄列表或檔案。
如果您想讓新的列表在背景分頁中開啟,請使用
gT。
通常,使用
<cr>
進入檔案或目錄。但是,「v」映射允許您開啟一個新視窗來容納新的目錄列表或檔案。會使用垂直分割。(對於水平分割,請參閱
netrw-o)
通常,v 鍵會垂直分割視窗,新視窗和游標會在左側。
只有一個樹狀列表緩衝區;在顯示的子目錄上使用「v」會分割螢幕,但會顯示相同的緩衝區兩次。
您可以將瀏覽 gvim 與用於編輯的 gvim 分開。在 netrw 瀏覽器中的檔案(不是目錄)上使用
<c-r>
映射,它將使用 gvim 伺服器(請參閱
g:netrw_servername)。後續使用
<cr>
(請參閱
netrw-cr)將重複使用該伺服器來編輯檔案。
「i」映射會在精簡、長、寬和樹狀列表格式之間循環。
精簡列表格式僅提供檔案和目錄的名稱。
長列表基於遠端目錄透過 ssh 的「ls」命令,或顯示本機目錄的檔案名稱、檔案大小(以位元組為單位)以及上次修改的時間和日期。使用長列表格式時,netrw 無法識別帶有尾隨空格的檔案名稱。請對此類檔案使用精簡列表格式。
寬列表格式使用兩個或更多個連續空格來劃分檔案名稱;當使用該格式時,netrw 將無法識別或使用名稱中嵌入兩個或更多個連續空格或任何尾隨空格的檔案名稱。但是,精簡列表格式可用於此類檔案。寬列表格式是最精簡的。
樹狀列表格式會有一個頂層目錄,後接一個或多個「|」開頭的檔案和目錄,表示目錄深度。您可以在目錄名稱上按 <cr>
鍵來開啟和關閉目錄。
您可以將慣用的列表樣式設為預設值;請參閱
g:netrw_liststyle。例如,將以下行放入您的 .vimrc 中,
let g:netrw_liststyle= 3
樹狀樣式將成為您的預設列表樣式。
使用 netrw 樹狀顯示的一種典型方式是
vim .
(use i until a tree display shows)
navigate to a file
v (edit as desired in vertically split window)
ctrl-w h (to return to the netrw listing)
P (edit newly selected file in the previous window)
ctrl-w h (to return to the netrw listing)
P (edit newly selected file in the previous window)
...etc...
「gp」會要求您輸入游標下檔案的新權限。目前,這僅適用於本機檔案。
若要將目錄變更回已加入書籤的目錄,請使用
{cnt}
gb
每次您變更到新的目錄(目前工作階段的新目錄)時,netrw 都會將該目錄儲存在最近瀏覽過的目錄歷史記錄清單中(除非
g:netrw_dirhistmax 為零;預設情況下,它會保留十個項目)。使用「u」映射,您可以變更為較早的目錄(前一個目錄)。若要執行相反的操作,請參閱
netrw-U。
「u」映射也接受計數,以在歷史記錄中回溯多個位置。為方便起見,qb(請參閱
netrw-qb)會列出可用於該計數的歷史記錄編號。
使用「U」映射,您可以變更為較後的目錄(後一個目錄)。此映射與「u」映射相反。(請參閱
netrw-u) 使用 qb 映射來列出書籤和歷史記錄。(請參閱
netrw-qb)
「U」映射也接受計數,以在歷史記錄中前進多個位置。
您可以使用以下方式指定樹狀列表的新樹狀頂層
:Ntree [dirname]
沒有「dirname」,則會使用目前的行(並省略任何開頭的深度資訊)。使用「dirname」,則會使用指定的目錄名稱。
「gn」映射會擷取游標下的單字,並將其用於變更樹狀列表的頂層。
使用 :NetrwClean,您可以輕鬆地從您的主目錄中移除 netrw;更精確地說,是從您的
'runtimepath' 的第一個目錄中移除。
使用 :NetrwClean!,netrw 會嘗試從您的
'runtimepath' 上的所有目錄中移除 netrw。當然,您必須具有正確的寫入/刪除權限才能執行此操作。
使用任何形式的命令,netrw 都會先要求確認您確實要執行移除操作。如果 netrw 沒有權限移除檔案,則會發出錯誤訊息。
某些檔案(例如 html、gif、jpeg、(word/office) doc 等檔案)最好使用特殊處理常式(即您的電腦作業系統提供的工具)檢視。Netrw 允許您透過以下方式叫用此類特殊處理常式
* 將游標放在檔案路徑上時按下 gx,或在 netrw 緩衝區中按下 x;您可以透過定義
g:netrw_nogx 變數來停用前者 * 當在命令列中時,輸入 :Open
<path>
,請參閱下方的
:Open。
可以透過新增函式
Netrw_get_URL_<filetype>
來針對每個檔案類型調整選取函式,其中
<filetype>
由
'filetype' 提供。該函式應傳回 gx 將使用的 URL 或檔案名稱,如果它傳回空字串,則會回復為預設行為。例如,用於 Markdown 和 HTML 連結的特殊處理常式為
「讓 gx 無論游標的確切位置如何,都可以在隱藏的連結上運作
function Netrw_get_URL_markdown()
" markdown URL such as [link text](http://ya.ru 'yandex search')
try
let save_view = winsaveview()
if searchpair('\[.\{-}\](', '', ')\zs', 'cbW', '', line('.')) > 0
return matchstr(getline('.')[col('.')-1:],
\ '\[.\{-}\](\zs' .. g:netrw_regex_url .. '\ze\(\s\+.\{-}\)\?)')
endif
finally
call winrestview(save_view)
return ''
endtry
endfunction
function Netrw_get_URL_html()
" HTML URL such as <a href='http://www.python.org'>Python is here</a>
" <a href="http://www.python.org"/>
try
let save_view = winsaveview()
if searchpair('<a\s\+href=', '', '\%(</a>\|/>\)\zs', 'cbW', '', line('.')) > 0
return matchstr(getline('.')[col('.') - 1 : ],
\ 'href=["'.."'"..']\?\zs\S\{-}\ze["'.."'"..']\?/\?>')
endif
finally
call winrestview(save_view)
return ''
endtry
endfunction
除了檔案路徑外,游標下的文字也可能是 URL。Netrw 預設使用下列規則運算式來判斷游標下的文字是否為 URL
:let g:netrw_regex_url = '\%(\%(http\|ftp\|irc\)s\?\|file\)://\S\{-}'
Netrw 依下列方法決定使用哪個特殊處理器:
* 對於 Windows:使用 explorer.exe * 對於 Mac OS X:使用 open * 對於 Linux:使用 xdg-open。
若要使用適當的處理器開啟路徑(或 URL)
<path>
,請輸入
:Open <path>
不需要跳脫字元,無論是對 shell 還是 Vim 的命令列。
若要啟動特定的應用程式
<app>
<args>
,通常
<args>
是
<path>
:Launch <app> <args>.
由於
<args>
可以任意複雜,特別是包含許多檔案路徑,因此跳脫字元留給使用者處理。
如果您透過設定 g:loaded_netrwPlugin 停用了 netrw 外掛程式(請參閱
netrw-noload),則可以使用
:call netrw#Launch('<app> <args>')
:call netrw#Open('<path>')
若要刪除書籤,請使用
{cnt}mB
如果有標記的檔案,則 mB 會將它們從書籤清單中移除。
刪除/移除檔案和目錄需要將游標移動到要刪除的檔案/目錄,然後按下「D」。目錄必須先為空才能成功移除。如果目錄是目錄的軟連結,則 netrw 會發出兩個請求來移除目錄,然後才會成功。Netrw 在執行移除前會要求確認。您可以使用「V」命令(視覺選取)選取一系列的行,然後按下「D」。
標記的檔案(和空目錄)將會被刪除;同樣地,您會被要求確認刪除才會實際執行。
另一種方法是刪除符合模式的檔案。
* 使用 mr(請參閱
netrw-mr),它會提示您輸入模式。這會將符合的檔案標記。然後,按下「D」。
g:netrw_rm_cmd: ssh HOSTNAME rm
g:netrw_rmdir_cmd 變數用於支援移除目錄。其預設值為
如果使用 g:netrw_rmdir_cmd 移除目錄失敗,netrw 將會再次嘗試使用 g:netrw_rmf_cmd 變數移除目錄。其預設值為
netrw-:Lexplore :[N]Lexplore [dir] 會在目前標籤的左側切換一個全高度的瀏覽器視窗。如果省略 [dir],它會在目前目錄上開啟 netrw 視窗;無論從哪個視窗發出命令,:Lexplore [dir] 都會顯示左側瀏覽器顯示中指定的目錄。
[N] 指定一個僅用於新 :Lexplore 視窗的
g:netrw_winsize。這表示,如果 [N] < 0:如果 [N] = 0:使用
N 列做為 Lexplore 視窗,則進行正常分割,如果 [N] > 0:則使用目前視窗的 N% 做為新視窗
:[N]Lexplore! [dir] 與 :Lexplore 類似,但全高度瀏覽器視窗會開啟在右側,而未初始化的
g:netrw_chgwin 會設定為 1(例如,編輯會優先在最左側的視窗中進行)。
netrw-:Sexplore :[N]Sexplore 會在叫用本機目錄瀏覽器之前總是先分割視窗。與 Explore 一樣,分割通常是水平進行。:[N]Sexplore! [dir] 與 :Sexplore 類似,但分割會垂直進行。
選用參數為
[dir]:預設情況下,這些瀏覽器命令會使用目前檔案的目錄。但是,您可以明確提供要使用的目錄(路徑);即。
:Explore /some/path
返回瀏覽器~當您使用 netrw 編輯檔案時(例如,當游標位於 netrw 瀏覽器視窗中的檔案名稱上方時按下 <cr>
時),在編輯該檔案時發出的 :Rexplore 會將顯示返回到該視窗中最後一個 netrw 瀏覽器顯示。
離開瀏覽器~相反地,當您編輯目錄時,發出 :Rexplore 會返回到編輯該視窗中最後編輯的檔案。
<2-leftmouse>
對應(僅在 gvim 和協作條款下可用)與 :Rexplore 的作用相同。
當 Explore、Sexplore、Hexplore 或 Vexplore 與以下四種模式之一一起使用時,Explore 會產生一個符合本機檔案系統請求的檔案列表。這些探索模式不適用於遠端檔案瀏覽。
*/filepat 目前目錄下符合 filepat 的檔案 **/filepat 目前目錄或其子目錄下符合檔案模式的檔案 *//pattern 目前目錄下包含模式的檔案(使用 vimgrep) **//pattern 目前目錄或其子目錄下包含模式的檔案(使用 vimgrep)
游標會放在列表中的第一個檔案上。然後,您可以透過
:Nexplore 繼續前往該列表中的後續檔案,或使用
:Pexplore 前往列表中的前一個檔案。Explore 將更新目錄並將游標放置在適當的位置。
如果您的主控台或圖形介面產生可辨識的上移或下移序列,您可能會覺得使用 shift-downarrow 和 shift-uparrow 很方便。它們在 netrw 中對應如下:
<s-down>
== Nexplore,以及 <s-up>
== Pexplore。
舉例來說,考慮
:Explore */*.c
:Nexplore
:Nexplore
:Pexplore
狀態列會在狀態列的右側顯示類似「符合 3 個中的 20 個」的訊息。
當游標位於檔案名稱上方時,按下 "qf" 會顯示檔案的大小和上次修改的時間戳記。目前此功能僅適用於本機檔案。
"<ctrl-h>" 對應會顯示一個請求器,允許使用者變更包含在
g:netrw_list_hide 中的檔案/目錄隱藏列表。隱藏列表由一個或多個以逗號分隔的模式組成。符合這些模式的檔案和/或目錄將被隱藏(即不顯示)或僅顯示(請參閱
netrw-a)。
"gh" 對應(請參閱
netrw-gh)會在常用的隱藏列表和隱藏以「.」開頭的檔案或目錄之間快速切換。
舉例來說,
let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+'
實際上,這使得
netrw-gh 命令的效果成為初始設定。它的意思是
\(^\|\s\s\):如果該行以以下內容開頭,-或- 遇到兩個連續的空格 \zs:現在開始隱藏匹配 \.:如果它現在以點開頭 \S\+:並且後面跟著一個或多個非空白字元
當「排序方式」是名稱時,您可以透過排序順序(g:netrw_sort_sequence)指定優先順序。排序順序通常依副檔名排列名稱列表的優先順序,儘管可以使用任何模式。模式以逗號分隔。預設排序順序為(全部在一行)
對於 Unix
'[\/]$,\<core\%(\.\d\+\)\=,\.[a-np-z]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,
\.info$,\.swp$,\.bak$,\~$'
否則
'[\/]$,\.[a-np-z]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,
\.swp$,\.bak$,\~$'
單獨的 * 是所有其他模式未涵蓋的檔案名稱的最終位置。您可以透過修改 g:netrw_sort_sequence 變數(手動或在您的 <.vimrc> 中)或使用 "S" 對應來變更排序順序。
當游標位於可執行檔上方時按下 X 會彈出一個提示,使用檔案名稱詢問任何引數。按下 [return] 後,netrw 會使用該命令和引數呼叫
system()。結果將由
:echomsg 顯示,因此
:messages 會重複顯示結果。Ansi 跳脫序列將被移除。
遠端符號連結(即透過 ssh 或 ftp 列出的連結)的問題在於很難判斷它們是連結到檔案還是目錄。
若要向上移動一個目錄,請按下 "-" 或當游標位於列表中的 ../ 目錄項目時按下 <cr>
。
在將 HOSTNAME 變更為使用者提供的 URL 指定的主機後,Netrw 將使用
g:netrw_list_cmd 中的命令來執行目錄列表操作。依預設,netrw 提供的命令為
ssh HOSTNAME ls -FLa
其中 HOSTNAME 會變成讀取嘗試所要求的 [user@]hostname。當然,使用者可以使用任何偏好的命令覆寫此命令。實作遠端瀏覽的 NetList 函數預期目錄會以尾隨斜線標記。
Netrw 的瀏覽功能允許您透過三種方式之一使用隱藏列表:忽略它、隱藏符合的檔案,以及僅顯示符合的檔案。
"a" 對應允許使用者循環瀏覽三種隱藏模式。
g:netrw_list_hide 變數保存一個以逗號分隔的模式列表,這些模式基於正規表示式(例如 ^.*\.obj$,^\.)指定隱藏列表。(另請參閱
netrw-ctrl-h)若要設定隱藏列表,請使用
<c-h>
對應。舉例來說,若要隱藏以「.」開頭的檔案,可以使用
<c-h>
對應將隱藏列表設定為 '^\..*'(或者可以在 <.vimrc> 中放入 let g:netrw_list_hide= '^\..*')。然後可以使用 "a" 鍵來顯示所有檔案、隱藏符合的檔案,或僅顯示符合的檔案。
範例:\.[ch]$ 這個隱藏列表命令將隱藏/顯示所有 *.c 和 *.h 檔案。
範例:\.c$,\.h$ 這個隱藏列表命令也將隱藏/顯示所有 *.c 和 *.h 檔案。
別忘了使用 "a" 對應來選取您想要的模式(正常/隱藏/顯示)!
如果顯示所有檔案或非隱藏檔案:透過將標記的檔案附加到其中並僅顯示非隱藏檔案來修改 g:netrw_list_hide 列表。
否則,如果僅顯示隱藏檔案:透過從中移除標記的檔案並僅顯示非隱藏檔案來修改 g:netrw_list_hide 列表。endif
'netrw_gitignore#Hide' 會在以下檔案中搜尋模式
'./.gitignore'
'./.git/info/exclude'
global gitignore file: `git config --global core.excludesfile`
system gitignore file: `git config --system core.excludesfile`
不存在的檔案會被忽略。Git-ignore 模式取自現有檔案,並轉換為隱藏檔案的模式。例如,如果您的 '.gitignore' 檔案中有 '*.log',它會轉換為 '.*\.log'。
若要使用此函數,只需將其輸出指派給
g:netrw_list_hide 選項即可。
Example: let g:netrw_list_hide= netrw_gitignore#Hide()
Git-ignored files are hidden in Netrw.
Example: let g:netrw_list_hide= netrw_gitignore#Hide('my_gitignore_file')
Function can take additional files with git-ignore patterns.
Example: let g:netrw_list_hide= netrw_gitignore#Hide() .. '.*\.swp$'
Combining 'netrw_gitignore#Hide' with custom patterns.
特別是使用遠端目錄瀏覽器時,不斷輸入密碼非常繁瑣。
對於 Linux/Unix 系統,Rob Flickenger 的書籍「Linux Server Hacks - 100 industrial strength tips & tools」(O'Reilly,ISBN 0-596-00461-3)提供了一個關於設定無密碼 ssh 和 scp 的提示,並討論了相關的安全性問題。它過去可以在
http://hacks.oreilly.com/pub/h/66 上找到,但顯然該位址現在被重新導向到某些「駭客雜誌」。我將嘗試根據該文章和 Ben Schmidt 的通訊進行摘要
1. 在本機電腦(ssh 用戶端)上產生公鑰/私鑰對
ssh-keygen -t rsa
(saving the file in ~/.ssh/id_rsa as prompted)
2. 當要求輸入密碼時,直接按下 <CR>
(兩次)表示不輸入密碼。如果您使用密碼,您還需要使用 ssh-agent,以便每個工作階段僅需輸入一次密碼。如果您不使用密碼,只需登入本機電腦或以任何方式取得金鑰檔案的存取權,即可存取任何已授權該金鑰登入的 ssh 伺服器。
3. 這會建立兩個檔案
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
4. 在目標機器(ssh 伺服器)上
cd
mkdir -p .ssh
chmod 0700 .ssh
5. 在您的本機電腦(ssh 用戶端)上:(一行)
ssh {serverhostname}
cat '>>' '~/.ssh/authorized_keys2' < ~/.ssh/id_rsa.pub
或對於 OpenSSH,(一行)
ssh {serverhostname}
cat '>>' '~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub
您可以使用以下命令進行測試
ssh {serverhostname}
這樣您應該就能登入伺服器機器,而無需再輸入任何內容。
如果您決定使用密碼,請執行
ssh-agent $SHELL
ssh-add
ssh {serverhostname}
當您使用 ssh-add 時,系統會提示您輸入金鑰密碼,但在隨後使用 ssh 時則不會。若要搭配 vim 使用,您可以使用
ssh-agent vim
然後,下次在 vim 中時,使用
:!ssh-add
或者,您可以將 ssh-agent 應用於您計劃在其中執行 vim 的終端機中
ssh-agent xterm &
並在需要時執行 ssh-add。
對於 Windows,vim 郵件列表上的使用者提到 Pageant 有助於避免不斷輸入密碼的需求。
Kingston Fung 寫了關於另一種避免不斷輸入密碼的方法
為了避免每次都輸入 scp 的密碼,您可以在文件中提供一個技巧來設置無需密碼的 ssh 帳戶。我找到了一個更好的方法:我可以使用一個常規的 ssh 帳戶,該帳戶使用密碼來存取資料,而無需每次都輸入密碼。這對安全性和便利性都有好處。我嘗試了 ssh 公開金鑰授權 + ssh-agent,實施後,它確實有效!
Ssh 提示
按下 "qb"(查詢書籤)將會列出已加入書籤的目錄和目錄瀏覽歷史記錄。
透過 "d" 對應,可以遠端(取決於全域變數 g:netrw_mkdir_cmd)或本地(取決於全域變數 g:netrw_localmkdir)建立新目錄。Netrw 將會發出請求以取得新目錄的名稱。在該點輸入一個空的 <CR>
將會中止建立目錄。嘗試建立已存在的本地目錄(作為檔案或目錄)將會被偵測到、報告,並忽略。
將 g:netrw_keepdir 設定為 0 會告知 netrw 使 vim 的目前目錄追蹤 netrw 的瀏覽目錄。
然而,鑒於 g:netrw_keepdir 的預設設定為 1,其中 netrw 維護其自身獨立的目前目錄概念,為了使這兩個目錄相同,請使用 "cd" 對應(輸入 cd)。該對應將會把 Vim 的目前目錄概念設定為 netrw 的目前瀏覽目錄。
Netrw 提供了幾種標記檔案的方法
* 您可以在游標位於檔案名稱上方時,按下 "mf" 來標記檔案。
* 使用 gvim 時,此外您可以使用
<s-leftmouse>
來標記檔案。(請參閱
netrw-mouse)
* 您可以使用 :MF 命令,該命令會採用檔案清單(對於本地目錄,該清單可能包含萬用字元 -- 請參閱
glob())
:MF *.c
以下 netrw 對應使用已標記的檔案
您可以透過標記檔案相同的方式一次取消標記一個檔案;也就是說,將游標放置在已標記的檔案上方,然後按下 "mf"。此過程也適用於使用 gvim 的
<s-leftmouse>
。您可以按下 "mu" 來取消標記所有檔案(請參閱
netrw-mu)。
已標記的檔案會使用 "netrwMarkFile" 醒目提示群組來醒目提示,該群組預設會連結到 "Identifier"(請參閱
群組名稱下的 Identifier)。您可以透過將類似以下的內容放置來變更醒目提示群組
highlight clear netrwMarkFile
hi link netrwMarkFile ..whatever..
放入 $HOME/.vim/after/syntax/netrw.vim 中。
如果滑鼠已啟用且可與您的 vim 一起運作,您可以使用
<s-leftmouse>
來標記一個或多個檔案。您可以透過拖曳 Shift+滑鼠左鍵來標記多個檔案。(請參閱
netrw-mouse)
"mF" 命令將會取消標記目前緩衝區中的所有檔案。您也可以在特定的、已標記的檔案上使用 mf (
netrw-mf) 來僅取消標記該檔案。
您可以使用 "qL" 將
位置列表轉換為已標記檔案清單。然後,您可以繼續使用 me (
netrw-me) 等命令來編輯它們。
您也可以透過按下 "mr" 來標記檔案;netrw 接著會發出提示,「輸入正規表示式:」。然後您可以輸入 shell 樣式的正規表示式,例如 *.c$ (請參閱
glob())。對於遠端系統,glob() 無法運作 -- 因此 netrw 會將 "*" 轉換為 ".*"(請參閱
regexp)並根據它標記檔案。將來,我可能會使其可以使用
regexp,而不是 glob() 樣式的運算式(另一個選項)。
"mv" 對應會導致 netrw 在本機已標記檔案清單中的每個檔案上個別執行任意 vim 命令
* 1split * sil! keepalt e file * 執行 vim 命令 * sil! keepalt wq!
系統會發出提示「Enter vim command: 」,以引導您輸入想要使用的 vim 命令。有關如何編輯命令的更多資訊,請參閱
cmdline-window。
啟用 "mx" 對應後,netrw 會詢問使用者要套用至所有已標記檔案的(外部)命令。命令中的所有 "%" 都會依序替換為每個已標記檔案的名稱。如果命令中沒有 "%",則會在命令後方加上一個空格和已標記的檔案名稱。
範例:(標記檔案) mx 輸入命令:cat
結果會是一系列的 Shell 命令:cat 'file1' cat 'file2' ...
啟用 'mX' 對應後,netrw 會詢問使用者要套用至全域已標記檔案清單上所有已標記檔案的(外部)命令。「成批」表示將一次對所有檔案執行一個命令。
command files
此方法很有用,例如,選取檔案並製作 tarball。
(mark files)
mX
Enter command: tar cf mynewtarball.tar
此範例將執行的命令
tar cf mynewtarball.tar 'file1' 'file2' ...
使用 ma,可將檔案名稱從已標記檔案清單移動到引數清單。使用 mA,可將檔案名稱從引數清單移動到已標記檔案清單。
使用 cb,可將檔案名稱從已標記檔案清單移動到緩衝區清單。使用 cB,可將檔案名稱從緩衝區清單複製到已標記檔案清單。
如果有任何已標記的檔案被壓縮,則 "mz" 將會解壓縮它們。如果有任何已標記的檔案被解壓縮,則 "mz" 將使用
g:netrw_compress 指定的命令來壓縮它們;預設情況下,它是 "gzip"。
請記住,可以使用正規表示式標記多個檔案(請參閱
netrw-mr);這對於促進壓縮和解壓縮大量檔案特別有用。
使用 mt (
netrw-mt) 選取目標目錄。然後變更目錄,選取檔案(請參閱
netrw-mf),並按下 "mc"。複製操作會從目前的視窗(執行 mf 的地方)複製到目標。
如果沒有使用
netrw-mt 設定目標目錄,則 netrw 會詢問您要複製到的目錄。
也可以將目錄及其內容(僅限本機)複製到目標目錄。
使用 vimdiff 來視覺化選取檔案之間的差異(可以選取兩個或三個檔案)。使用全域已標記檔案清單。
"mg" 命令會將
:vimgrep 套用至已標記的檔案。該命令會詢問請求的模式;然後可以輸入
/pattern/[g][j]
! /pattern/[g][j]
pattern
使用 /pattern/j,"mg" 會將目前的已標記檔案清單縮減為僅包含也具有指定模式的已標記檔案。因此,可以使用
mr ...file-pattern...
mg /pattern/j
來取得滿足檔案模式且也僅限於包含某些所需模式的檔案的已標記檔案清單。
"mh" 命令會擷取已標記檔案的後綴,並切換其在隱藏清單上的存在。請注意,以這種方式多次標記相同的後綴,將會導致每個檔案的後綴存在被切換(因此,具有相同後綴的已標記檔案數量為偶數,就等於根本沒有選取它們一樣)。
警告:移動檔案比複製檔案更危險。要移動的檔案會先複製,然後刪除;如果複製操作失敗且刪除操作成功,則您將遺失該檔案。請先使用不重要的檔案嘗試,或者使用 mc 和 D 自己執行複製,然後刪除。使用風險自負!
使用 mt (
netrw-mt) 選取目標目錄。然後變更目錄,選取檔案(請參閱
netrw-mf),並按下 "mm"。移動操作會從目前的視窗(執行 mf 的地方)移動到目標。
使用 "ms",netrw 將執行已標記的檔案(使用 vim 的
:source 命令)
* 如果游標位於檔案名稱之上,則 netrw 視窗目前顯示的目錄將用作複製/移動目標。
* 此外,如果游標位於標題中,則 netrw 視窗目前顯示的目錄將用作複製/移動目標。除非目標已經是目前的目錄。在這種情況下,輸入 "mf" 會清除目標。
* 但是,如果游標位於目錄名稱之上,則該目錄將用作複製/移動目標
* 若使用啟用滑鼠的 vim 或 gvim,可以使用 <c-leftmouse>
來選取目標
在一個 vim 會期中,一次只會有一個複製/移動目標;也就是說,目標是一個腳本變數(請參閱
s:var),並在(vim 的執行個體中)所有 netrw 視窗之間共享。
當使用選單和 gvim 時,netrw 會提供一個「目標」項目,可讓您從書籤和歷史清單中選取目標。
相關主題:標記檔案......................................|netrw-mf| 使用正規表示式標記檔案................|netrw-mr| 已標記檔案:使用書籤的目標目錄.....|netrw-Tb| 已標記檔案:使用歷史記錄的目標目錄.......|netrw-Th|
我的 <.vimrc> 中有設定。
當標記一組遠端檔案時,產生的標籤檔會被「取得」;也就是說,會將副本傳輸到本機系統的目錄中。然後會修改現在本機的標籤檔,以便可以透過網路使用它。修改的內容與標籤中的檔案名稱有關;每個檔案名稱前面都會加上用於取得該檔案的 netrw 相容 URL。當後續使用其中一個前往標籤的動作(
tags)時,netrw 將使用 URL 來編輯所需的檔案並前往標籤。
設定已標記的檔案複製/移動目標。
netrw-qb 映射會提供您書籤(和歷史記錄)的清單。可以使用 [count]Tb(預設計數:1)選擇其中一個書籤作為已標記的檔案目標。
相關主題: 複製檔案到目標............................|netrw-mc| 列出書籤和歷史記錄......................|netrw-qb| 已標記的檔案:設定目標目錄................|netrw-mt| 已標記的檔案:使用歷史記錄的目標目錄......|netrw-Th| 標記檔案......................................|netrw-mf| 使用正規表示式標記檔案....................|netrw-mr| 移動檔案到目標.............................|netrw-mm|
設定已標記的檔案複製/移動目標。
netrw-qb 映射會提供您歷史記錄(和書籤)的清單。可以使用 [count]Th(預設計數:0;即目前目錄)選擇其中一個歷史記錄項目作為已標記的檔案目標。
相關主題: 複製檔案到目標............................|netrw-mc| 列出書籤和歷史記錄......................|netrw-qb| 已標記的檔案:設定目標目錄................|netrw-mt| 已標記的檔案:使用書籤的目標目錄..........|netrw-Tb| 標記檔案......................................|netrw-mf| 使用正規表示式標記檔案....................|netrw-mr| 移動檔案到目標.............................|netrw-mm|
「mu」映射會取消標記所有目前已標記的檔案。此命令與「mF」不同,因為後者僅取消標記目前目錄中的檔案,而「mu」會取消標記全域和所有緩衝區本機已標記的檔案。(請參閱
netrw-mF)
<netrw.vim> 瀏覽器以您可以修改的變數形式提供設定;透過將這些設定放置在您的 <.vimrc> 中,您可以自訂您的瀏覽偏好。(另請參閱:
netrw-settings)
--- -----------
Var Explanation
--- -----------
g:netrw_chgperm Unix/Linux:「chmod PERM FILENAME」Windows:「cacls FILENAME /e /p PERM」用於變更檔案的存取權限。
g:netrw_clipboard =1 預設情況下,netrw 會嘗試確保剪貼簿的值保持不變。但是,有些使用者回報說,他們使用此設定時遇到速度問題;因此,此選項設定為零時,可讓這些使用者防止 netrw 儲存和還原剪貼簿(後者僅在需要時執行)。這表示如果剪貼簿在正常的 netrw 操作中(不經意地)變更,它將不會還原到先前的狀態。
數值 細-長-樹 寬 =0 u-cul u-cuc u-cul u-cuc =1 u-cul u-cuc cul u-cuc =2 cul u-cuc cul u-cuc =3 cul u-cuc cul cuc =4 cul cuc cul cuc =5 U-cul U-cuc U-cul U-cuc =6 U-cul U-cuc cul U-cuc =7 cul U-cuc cul U-cuc =8 cul U-cuc cul cuc
g:netrw_decompress = { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"} 一個對應到解壓縮程式的字典。
快速瀏覽會保留舊的目錄清單緩衝區,因此不需要重新取得它們。此功能對於遠端瀏覽尤其重要。但是,如果將檔案引入或從此類目錄中刪除,則舊的目錄緩衝區會過時。可以使用
netrw-ctrl-l 隨時重新整理此類目錄清單。此選項讓使用者可以選擇權衡準確性(即最新的清單)與速度。
g:netrw_ftp_browse_reject ftp 可能會產生許多錯誤和警告,這些錯誤和警告可能會在清單中顯示為「目錄」和「檔案」。此模式用於移除此類內嵌訊息。預設情況下,其值為:「^total\s\+\d\+$\| ^Trying\s\+\d\+.*$\| ^KERBEROS_V\d rejected\| ^Security extensions not\| No such file\| : connect to address [0-9a-fA-F:]* : No route to host$」
g:netrw_liststyle 設定預設的列表樣式:= 0:簡潔列表(每行一個檔案)= 1:長列表(每行一個檔案,包含時間戳記資訊和檔案大小)= 2:寬列表(多個檔案以欄顯示)= 3:樹狀列表
範例
let g:netrw_list_hide= '.*\.swp$'
let g:netrw_list_hide= netrw_gitignore#Hide() .. '.*\.swp$'
g:netrw_mousemaps =1 (預設值):在瀏覽時啟用滑鼠按鈕,以便:左鍵:開啟檔案/目錄 Shift+左鍵:標記檔案 中鍵:與 P 相同 右鍵:移除檔案/目錄 =0:停用滑鼠映射
g:netrw_sizestyle 未定義:實際位元組 (預設值) ="b":實際位元組 (預設值) ="h":人類可讀 (例如,5k、4m、3g),使用 1000 進位 ="H":人類可讀 (例如,5K、4M、3G),使用 1024 進位 長列表 (
netrw-i) 和查詢檔案映射 (
netrw-qf) 將會使用指定的樣式顯示檔案大小。
g:netrw_retmap 如果此變數存在且設定為 1,則:* 如果在 netrw 選取的檔案中,且 * 不存在一般模式的
<2-leftmouse>
映射,則會映射
<2-leftmouse>
以便輕鬆返回 netrw 瀏覽器視窗。範例:按一下以選取並開啟檔案,按兩下以返回。
請注意,您可以選擇:* 讓 g:netrw_retmap= 1,且 * nmap <silent>
YourChoice <Plug>
NetrwReturn 並使用另一個映射而不是 <2-leftmouse>
來呼叫返回。
預設值:=0
預設值:""
g:netrw_sort_sequence 在依名稱排序時,首先依逗號分隔的模式順序排序。請注意,您模式中應該考慮用於指示檔案類型的任何附加修飾。預設值:'[\/]$,,\.bak$,\.o$,\.h$, \.info$,\.swp$,\.obj$'
netrwBak : *.bak netrwCompress: *.gz *.bz2 *.Z *.zip netrwCoreDump: core.\d\+ netrwData : *.dat netrwDoc :
.doc,.txt,*.pdf,
.pdf,.docx netrwHdr : *.h netrwLex : *.l *.lex netrwLib : *.a *.so *.lib *.dll netrwMakefile: [mM]akefile *.mak netrwObj : *.o *.obj netrwPix :
.bmp,.fit,
.fits,.gif,
.jpg,.jpeg,
.pcx,.ppc
.pgm,.png,
.psd,.rgb
.tif,.xbm,*.xcf netrwTags : tags ANmenu ANtags netrwTilde : * netrwTmp : tmp* *tmp netrwYacc : *.y
此外,在
'suffixes' 中提及的那些群組也會加入特殊檔案強調群組。這些語法強調群組預設會連結到 netrwGray 或 Folded (請參閱
hl-Folded),但您可以將以下程式碼行加入
hi link netrwCompress Visual
到您的 <.vimrc> 中以使用您自己的偏好設定。或者,您可以將此類規格加入
.vim/after/syntax/netrw.vim.
當以下情況發生時,netrw 會設定 netrwGray 強調顯示
* netrwGray has not been previously
defined
* the gui is running
舉例來說,我個人使用深色背景配色方案,並在 .vim/after/syntax/netrw.vim 中加入以下內容
hi netrwCompress term=NONE cterm=NONE gui=NONE ctermfg=10 guifg=green ctermbg=0 guibg=black
hi netrwData term=NONE cterm=NONE gui=NONE ctermfg=9 guifg=blue ctermbg=0 guibg=black
hi netrwHdr term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1
hi netrwLex term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1
hi netrwYacc term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1
hi netrwLib term=NONE cterm=NONE gui=NONE ctermfg=14 guifg=yellow
hi netrwObj term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red
hi netrwTilde term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red
hi netrwTmp term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red
hi netrwTags term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red
hi netrwDoc term=NONE cterm=NONE gui=NONE ctermfg=220 ctermbg=27 guifg=yellow2 guibg=Blue3
hi netrwSymLink term=NONE cterm=NONE gui=NONE ctermfg=220 ctermbg=27 guifg=grey60
g:netrw_timefmt 指定 vim strftime() 的格式字串。預設值 "%c" 是「目前地區設定的偏好日期和時間表示法」,根據我 strftime() 的 manpage 條目;然而,並非所有人都對此感到滿意。一些替代方案:「%a %d %b %Y %T」、「 %a %Y-%m-%d %I-%M-%S %p」預設值:"%c"
g:netrw_use_noswf netrw 通常會避免為瀏覽器緩衝區寫入交換檔案。然而,在某些系統下,這顯然會導致出現煩人的 ml_get 錯誤;如果您收到 ml_get 錯誤,請嘗試在您的 .vimrc 中加入 let g:netrw_use_noswf= 0。預設值:1
g:netrw_xstrlen 控制 netrw 如何計算字串長度,包括多位元組字元的字串長度。(感謝 N Weibull、T Mechelynck) =0:使用 Vim 的內建 strlen() =1:碼點數 (拉丁字母 a + 組合符號變音符號為兩個碼點) (預設值) =2:間隔碼點數 (拉丁字母 a + 組合符號變音符號為一個間隔碼點;硬式 Tab 鍵是一個;寬和窄的 CJK 各為一個;等等) =3:虛擬長度 (將 Tab 鍵計算為 1 到
'tabstop' 之間的任何值,寬 CJK 計算為 2 而不是 1,阿拉伯字母 alif 在緊接在 lam 之後時計算為零,否則為 1,等等)
此變數指定頂層選單名稱;預設值為「Netrw.」。如果您想要變更此名稱,請在您的 .vimrc 中執行此操作。
Netrw 的設計宗旨是透過儲存使用者選項、將選項設定為與 netrw 需求相容的內容,然後再還原這些選項來處理使用者選項。但是,autochdir 選項
:set acd
是有問題的。Autochdir 會將目前目錄設定為包含您編輯檔案的目錄;這顯然也適用於目錄。換句話說,autochdir 會將目前目錄設定為包含「檔案」的目錄(即使該「檔案」本身是目錄)。
使用 NetrwSettings.vim 外掛程式,
:NetrwSettings
將會彈出一個視窗,其中包含 netrw 用於其設定的許多變數。您可以變更它們的任何值;當您儲存檔案時,將會使用其中的設定。您也可以在任何行上按下「?」來取得有關每個變數功能的說明。
如果沒有標記的檔案
在瀏覽遠端目錄時,您可以按下 O 鍵來取得游標下的檔案(即在您的本機上取得複本,但不會編輯它)。
如果有標記的檔案
將會取得標記的檔案(即將複本傳輸到您的本機,但不會設定為編輯)。
此操作僅支援 ftp 和 scp(但是由於這兩個都可以用於瀏覽,因此應該不是問題)。狀態列的右側將會顯示類似「正在取得 filename」的訊息。傳輸完成後,將會還原狀態列。
Netrw 也可以使用本機瀏覽器「取得」檔案。Netrw 的目錄顯示不一定與 Vim 的「目前目錄」相同,除非在使用者的 <.vimrc> 中將
g:netrw_keepdir 設定為 0。可以使用本機瀏覽器選取檔案(將游標放在檔案上),然後按下「O」將會「取得」該檔案;即將其複製到 Vim 的目前目錄。
若要在 netrw 的目前目錄中開啟新檔案,請按下「%」。此映射會詢問使用者新的檔案名稱;將會在 netrw 的目前目錄中放置一個該名稱的空白檔案(即 b:netrw_curdir)。
當游標位於要預覽的所需檔案名稱之上時,可以使用「p」鍵來使用預覽視窗。然後將會分割顯示,以同時顯示瀏覽器(游標將會保留在此處)和檔案(請參閱
:pedit)。預設情況下,分割將會水平進行;如果事先設定了
g:netrw_preview,則可以使用垂直分割。
一組有趣的 netrw 設定是
let g:netrw_preview = 1
let g:netrw_liststyle = 3
let g:netrw_winsize = 30
這些設定將會
1. 將垂直分割設為預覽檔案的預設值 2. 將預設清單樣式設為「樹狀」 3. 開啟垂直預覽視窗時,目錄清單將僅使用可用欄的 30%;視窗的其餘部分則用於預覽視窗。
若要在先前使用的(上次存取的)視窗中編輯游標下的檔案或目錄(請參閱 :he
CTRL-W_p),請按下「P」。如果只有一個視窗,則預設情況下會水平分割該視窗。
如果有超過一個視窗,則先前視窗將會重新用於選取的檔案/目錄。如果先前視窗的相關聯緩衝區已修改,並且只有一個視窗具有該緩衝區,則將會詢問使用者是否要先儲存緩衝區(是、否或取消)。
若要重新整理本機或遠端目錄清單,請按下 ctrl-l (<c-l>
) 或當游標位於清單中的 ./ 目錄項目上方時,按下 <cr>
。也可以使用 ":e ." 來重新整理本機目錄。
可以按下「r」鍵來切換正常和反向排序順序。
重新命名檔案和目錄的步驟是將游標移動到要移動(重新命名)的檔案/目錄,然後按下「R」。然後將會詢問您要將檔案/目錄重新命名為什麼。您可以使用「V」命令(視覺選取)來選取一系列的行,然後按下「R」;將會針對每個檔案詢問您要將其重新命名為什麼。
將會重新命名(移動)標記的檔案。將會像上方一樣詢問您,以指定要將檔案/目錄移動到何處。
如果使用「s/frompattern/topattern/」來回答重新命名查詢,則標記檔案清單上的後續檔案將會透過取得每個名稱、套用該取代,並將每個檔案重新命名為結果來重新命名。例如
mr [query: reply with *.c]
R [query: reply with s/^\(.*\)\.c$/\1.cpp/]
此範例將會標記所有 "*.c" 檔案,然後將其重新命名為 "*.cpp" 檔案。Netrw 會保護您不會在未確認的情況下覆寫本機檔案,但不會保護遠端檔案。
ctrl-X 字元對於重新命名檔案具有特殊意義
<c-x> : a single ctrl-x tells netrw to ignore the portion of the response
lying between the last '/' and the ctrl-x.
<c-x><c-x> : a pair of contiguous ctrl-x's tells netrw to ignore any
portion of the string preceding the double ctrl-x's.
請注意,移動檔案是一項危險的操作;複製更安全。這是因為遠端檔案的「移動」實際上是複製 + 刪除 - 如果複製失敗且刪除成功,則可能會遺失檔案。請自行承擔風險使用。
請參閱
cmdline-editing 以取得更多有關如何編輯命令列的資訊;特別是,您會發現
<ctrl-f>
(啟動命令列視窗編輯)和
<ctrl-c>
(使用游標下的命令列)與 R 命令結合使用很有用。
可以依名稱、時間或(檔案)大小選取排序樣式。「s」映射允許在三種選擇之間循環;目錄清單將會自動重新整理,以反映選取的樣式。
* C:本身會選取目前持有 netrw 緩衝區的視窗,以供後續透過
netrw-cr 進行編輯。C 映射僅在 netrw 緩衝區中可用。
* [count]C:此計數將用作視窗編號,以便後續透過
netrw-cr 進行編輯。
使用
let g:netrw_chgwin= -1
將還原預設的編輯行為(即,後續編輯將使用目前視窗)。
如果
g:netrw_usetab 存在且為零,或者如果
<c-tab>
有預先存在的映射,則
<c-tab>
將不會被映射。也可以映射其他按鍵而不是
<c-tab>
:(但您仍然需要設定
g:netrw_usetab)。
nmap <unique> (whatever) <Plug>NetrwShrink
使用者可以建立自訂的映射。指定一個變數
g:Netrw_UserMaps,以儲存鍵盤映射字串和函式名稱的
List 列表。
[["keymap-sequence","ExampleUserMapFunc"],...]
* 設定映射
nno <buffer> <silent> KEYMAP-SEQUENCE
:call s:UserMaps(islocal,"ExampleUserMapFunc")
* 如果該函式呼叫的結果是字串 "refresh",則刷新 * 如果結果字串不是 "",則會執行該字串 ( :exe result ) * 如果結果是 List,則會對結果 List 中的每個字串執行上述兩個動作。
使用者函式會傳遞一個引數;它類似於
fun! ExampleUserMapFunc(islocal)
其中,a:islocal 如果是本機目錄系統呼叫則為 1,如果是遠端目錄系統呼叫則為 0。
netrw-call netrw-expose netrw-modify 使用 netrw#Expose("varname") 來存取 netrw 內部(腳本本地)變數。使用 netrw#Modify("varname",newvalue) 來變更 netrw 內部變數。使用 netrw#Call("funcname"[,args]) 來呼叫帶有指定引數的 netrw 內部函式。
範例:取得 netrw 標記檔案清單的副本
let netrwmarkfilelist= netrw#Expose("netrwmarkfilelist")
範例:修改 netrw 標記檔案清單的值
call netrw#Modify("netrwmarkfilelist",[])
範例:透過 gu 的映射清除 netrw 標記檔案清單
" ExampleUserMap: {{{2
fun! ExampleUserMap(islocal)
call netrw#Modify("netrwmarkfilelist",[])
call netrw#Modify('netrwmarkfilemtch_{bufnr("%")}',"")
let retval= ["refresh"]
return retval
endfun
let g:Netrw_UserMaps= [["gu","ExampleUserMap"]]
(此章節可能會隨著我收到回饋而增加)(另請參閱
netrw-debug)
netrw-p1P1. 我使用 Windows,而我使用 ftp 的網路瀏覽不會依照 {{{2 時間或大小排序!- 或者 - 遠端系統是 Windows 伺服器;為什麼我沒有依照時間或大小排序?
Windows 的 ftp 對 ls 的支援最少(即,它不接受排序選項)。它不支援 -F,該選項會提供一個說明字元(ABC/ 代表「ABC 是一個目錄」)。然後 Netrw 會使用 "dir" 來取得其精簡和詳細的清單。如果您認為您的 ftp 支援完整的 ls,請將下列內容放入您的 <.vimrc> 中
let g:netrw_ftp_list_cmd = "ls -lF"
let g:netrw_ftp_timelist_cmd= "ls -tlF"
let g:netrw_ftp_sizelist_cmd= "ls -slF"
或者,如果您在 Windows 機器上有 cygwin,請將下列內容放入您的 <.vimrc> 中
let g:netrw_cygwin= 1
當遠端系統是 Windows 時,也會發生此問題。在這種情況下,各種 g:netrw_ftp_[time|size]list_cmds 如上所示,但遠端系統不會正確修改其清單行為。
netrw-p2 P2. 我嘗試了 rcp://user@host/ (或 ftp 以外的協定),而 netrw {{{2 使用了 ssh!這不是我要求的...
Netrw 有兩種瀏覽遠端目錄的方法:ssh 和 ftp。除非您明確指定 ftp,否則會使用 ssh。當需要下載檔案時(不僅僅是目錄清單),netrw 會使用指定的協定來執行此操作。
將下列陳述式放入您的
vimrc 中
let g:netrw_liststyle= 1
您的系統的 strftime() 是否接受 "%c" 來產生類似 "Sun Apr 27 11:49:23 1997" 的日期?如果沒有,請執行 "man strftime" 並找出應該使用的選項。然後將其放入您的
vimrc 中
let g:netrw_timefmt= "%X" (where X is the option)
netrw-p5 P5. 我希望我的目前目錄追蹤我的瀏覽。{{{2 我該怎麼做?
將下列程式碼行放入您的
vimrc 中
let g:netrw_keepdir= 0
netrw-p6 P6. 我在我的檔案名稱中使用中文(或其他非 ASCII)字元,{{{2 而且 netrw (Explore, Sexplore, Hexplore 等) 沒有顯示它們!
(取自 Wu Yongwei 在 vim 郵件列表上提供的答案)我現在明白了問題所在。您的程式碼頁不是 936,對嗎?Vim 似乎只能開啟在目前程式碼頁中有效的名稱的檔案,就像許多其他不使用 Windows API Unicode 版本的應用程式一樣。這是一個與作業系統相關的問題。當系統地區設定使用 UTF-8 時,您不應該遇到這些問題,例如現代 Linux 發行版。
(...這是推薦人們使用 utf-8 的另一個原因!)
netrw-p7 P7. 我收到「ssh 在您的系統上不是可執行檔」的訊息 - 我該 {{{2 怎麼辦?
(Dudley Fox)我認識的大多數人使用 putty 進行 windows ssh。它是一個免費的 ssh/telnet 應用程式。您可以在這裡閱讀更多相關資訊
(Marlin Unruh)這個程式對我來說也很有效。它是一個單一的可執行檔,因此他/她可以將其複製到 Windows\System32 資料夾中,並建立其捷徑。
(Dudley Fox)您可能還希望考慮 plink,因為它聽起來最像您正在尋找的。plink 是 putty 套件中的一個應用程式。
(Vissale Neang)或許您可以嘗試 Windows 版的 OpenSSH,您可以從這裡取得
它不需要完整的 Cygwin 套件。
(Antoine Mechelynck)對於在本機 Windows 環境中工作所需的個別類 Unix 程式,我建議從 sourceforge 上的 GnuWin32 專案取得(如果有的話)
與在 Windows 上設定類 Unix 虛擬機器的 Cygwin 不同,GnuWin32 是使用 Windows 系統呼叫重寫的 Unix 公用程式,並且其程式在 cmd.exe「Dos 方塊」中執行良好。
(dave)下載 WinSCP 並使用它連線至伺服器。在「喜好設定」>「編輯器」中,將 gvim 設定為您的編輯器
按一下「新增...」
設定外部編輯器(根據需要調整路徑,包括結尾的引號和 !.!:) "c:\Program Files\Vim\vim82\gvim.exe" !.!
檢查下方方塊中的檔案類型是否為 {asterisk}
.{asterisk}(所有檔案),或您想要的任何類型(cec:將 {asterisk}
變更為 *;我必須這樣寫,否則 helptags 系統會認為它是一個標籤)
請確保它位於清單方塊的頂端(如果不是,請按一下它,然後按一下「向上」)。如果使用 Norton Commander 樣式,您只需按下 <F4>
即可在 gvim 的本機副本中編輯檔案。
(Vit Gottwald)如何產生公鑰/私鑰,並將公鑰儲存在伺服器上
http://www.chiark.greenend.org.uk/~sgtatham/putty/0.60/htmldoc/Chapter8.html#pubkey-gettingready
(8.3 Getting ready for public key authentication)
如何將私鑰與 "pscp" 搭配使用
http://www.chiark.greenend.org.uk/~sgtatham/putty/0.60/htmldoc/Chapter5.html
(5.2.4 Using public key authentication with PSCP)
(Ben Schmidt)我發現 cwRsync 中包含的 ssh 非常出色,並且現在我在遇到的大多數 Windows 系統上安裝 cwRsync 或 cwRsyncServer。我猜測由同一人封裝的 COPSSH,可能更適合在 Windows 上僅用作 ssh,並且可能包含 sftp 等,我懷疑 cwRsync 沒有,儘管它可能會包含
(cec)若要正確使用上述建議,您需要在 .vimrc 中修改下列使用者可設定的變數
通常,netrw 會嘗試避免為其臨時目錄緩衝區寫入交換檔。但是,在某些系統上,此嘗試似乎導致出現 ml_get 錯誤。請嘗試在您的 <.vimrc> 中將
g:netrw_use_noswf 設定為 0。
let g:netrw_use_noswf= 0
netrw-p9 P9. 我不斷收到「[某物] 是目錄」和 {{{2「按 ENTER 或輸入指令繼續」提示...
「[某物] 是目錄」提示是由 Vim 而非 netrw 發出的,而且似乎沒有任何方法可以解決它。加上預設的 cmdheight 為 1,此訊息會導致「按 ENTER...」提示。因此:請閱讀
hit-enter;我也建議您在您的 <.vimrc> 檔案中將您的
'cmdheight' 設定為 2(或更大)。
netrw-p10 P10. 我想要兩個視窗;左邊一個窄視窗,右邊一個我的 {{{2 編輯視窗。我該如何實現這一點?
您可能希望 netrw 在側邊視窗中執行。如果是這樣,您可能會發現 ":[N]Lexplore" 符合您的需求。可選的 "[N]" 允許您選擇您希望
:Lexplore 視窗開始的欄數(請參閱
g:netrw_winsize 以瞭解此參數的工作方式)。
先前的解決方案
* 在你的 <.vimrc> 中加入以下這行: `let g:netrw_altv = 1` * 編輯目前目錄:`:e .` * 選擇一些檔案,按下 `v` * 隨意調整視窗大小(請參考
CTRL-W_< 和
CTRL-W_>)。如果你使用 gvim,可以用滑鼠拖曳分隔線。 * 當你需要開啟新檔案時,使用 `ctrl-w h` 回到 netrw 瀏覽器,選擇一個檔案,然後按下 `P` (請參考
CTRL-W_h 和
netrw-P)。如果你使用 gvim,可以在瀏覽器視窗中按下
<滑鼠左鍵>
,然後按下
<滑鼠中鍵>
來選擇檔案。
netrw-p11 P11. 我的目錄排序不正確,或是在檔案名稱列表中出現了不想要的字元 {{{2,或是寬列表中的項目沒有正確對齊,...
netrw-p12 P12. 我是 Windows + putty + ssh 使用者,當我嘗試 {{{2 瀏覽時,目錄缺少結尾的 "/",導致 netrw 將它們視為檔案傳輸,而不是嘗試瀏覽子目錄。我該如何修正這個問題?
(mikeyao) 如果你想要在 Windows 下透過 ssh 和 putty 使用 vim,請嘗試結合 pscp/psftp 和 plink。pscp/psftp 將用於連線,而 plink 將用於在伺服器上執行命令,例如:使用
'ls' 列出檔案和目錄。
這些是我用來執行此操作的設定
" list files, it's the key setting, if you haven't set,
" you will get a blank buffer
let g:netrw_list_cmd = "plink HOSTNAME ls -Fa"
" if you haven't add putty directory in system path, you should
" specify scp/sftp command. For examples:
"let g:netrw_sftp_cmd = "d:\\dev\\putty\\PSFTP.exe"
"let g:netrw_scp_cmd = "d:\\dev\\putty\\PSCP.exe"
netrw-p13 P13. 我想要使用 Nwrite 和 scp/ssh {{{2 樣式的連線來加速寫入。該怎麼做?(Thomer M. Gil)
將以下內容新增到你的 ~/.ssh/config
# you change "*" to the hostname you care about
Host *
ControlMaster auto
ControlPath /tmp/%r@%h:%p
然後建立一個到主機的 ssh 連線並保持執行
ssh -N host.domain.com
現在遠端使用 Vim 的 Netrw 開啟一個檔案,享受快速的體驗
vim scp://host.domain.com//home/user/.bashrc
netrw-p14 P14. 我該如何使用雙擊而不是 netrw 通常的單擊 {{{2 來開啟檔案或目錄?(Ben Fritz)
首先,使用以下命令停用 netrw 的映射:
let g:netrw_mousemaps= 0
然後在 $HOME/.vim/after/ftplugin/netrw.vim 中建立僅限 netrw 緩衝區的映射:
nmap <buffer> <2-leftmouse> <CR>
請注意,將 g:netrw_mousemaps 設定為零會關閉 netrw 的所有滑鼠映射,而不僅僅是
<滑鼠左鍵>
的映射。(請參閱
g:netrw_mousemaps)
netrw-p15 P15. 當編輯遠端檔案時(例如:`:e ftp://hostname/path/file`),{{{2 在 Windows 下我收到一個
E303 訊息,抱怨無法開啟交換檔案。
(romainl) 看起來你是在受保護的目錄中啟動 Vim。從你的 $HOME 或其他可寫入的目錄啟動 netrw。
netrw-p16 P16. Netrw 自己關閉了緩衝區。{{{2 重現問題的步驟是什麼? 1. `:Explore`,導覽目錄,開啟檔案 2. `:Explore`,開啟另一個檔案 3. 步驟 1 中開啟的緩衝區將會被關閉。 o 預期的輸出是什麼?你看到的是什麼?我預期兩個緩衝區都存在,但只有最後一個存在。
(Lance) 問題是由 .vimrc 中的 "set autochdir" 引起的。(drchip) 我可以透過設定
'acd' 來重現這個問題。看起來緩衝區並非完全關閉;":ls!" 會顯示它們(雖然 ":ls" 不會)。
netrw-P18 P18. 如何在目錄列表中取得編號? {{{2 使用
g:netrw_bufsettings,你可以控制 netrw 的緩衝區設定;嘗試將以下內容放入你的 .vimrc 中:
let g:netrw_bufsettings="noma nomod nu nobl nowrap ro nornu"
如果你想要使用相對編號,請嘗試:
let g:netrw_bufsettings="noma nomod nonu nobl nowrap ro rnu"
netrw-P19 P19. 我該如何讓 gvim 啟動時顯示目錄列表?{{{2 嘗試將以下程式碼片段放入你的 .vimrc 中:
augroup VimStartup
au!
au VimEnter * if expand("%") == "" && argc() == 0 &&
\ (v:servername =~ 'GVIM\d*' || v:servername == "")
\ | e . | endif
augroup END
如果你願意,可以使用 `Lexplore` 來代替 "e"。這個程式碼片段假設你已啟用用戶端伺服器 (即 "huge" vim 版本)。
netrw-P20 P20. 我建立了一個帶有重音符號的目錄(或檔案),{{{2 但 netrw 不讓我進入該目錄/讀取該檔案
可能是 shell 或作業系統使用的編碼與你的 vim (netrw) 使用的編碼不同。未來針對 vim 支援 "systemencoding" 的修補程式可能會解決這個問題;現在,只需讓 netrw 使用正確的編碼即可。例如:
au FileType netrw set enc=latin1
netrw-P21 P21. 當我嘗試複製或移動檔案時,收到錯誤訊息:{{{2
**error** (netrw) tried using g:netrw_localcopycmd<cp>; it doesn't work!
哪裡出錯了?
Netrw 使用數個系統層級的命令來執行操作(請參閱
你可能需要調整其中一個或多個命令的預設命令,方法是在你的 .vimrc 中正確設定它們。另一個困難的來源是,這些命令使用 vim 的本機目錄,這可能與 netrw 顯示的瀏覽目錄不同(請參閱
g:netrw_keepdir)。
步驟 1:確認你遇到的問題是否已透過從以下網址取得最新(通常是開發中的)netrw 副本來解決:
<netrw.vim> 腳本通常以類似以下的方式安裝在系統上:
/usr/local/share/vim/vim8x/plugin/netrwPlugin.vim
/usr/local/share/vim/vim8x/autoload/netrw.vim
(see output of :echo &rtp)
它會在啟動時自動載入 (假設 `:set nocp`)。如果你安裝了新的 netrw,它將位於:
$HOME/.vim/plugin/netrwPlugin.vim
$HOME/.vim/autoload/netrw.vim
步驟 2:假設你已安裝最新版本的 netrw,請檢查你的問題是否真的由 netrw 引起。建立一個名為 netrw.vimrc 的檔案,其中包含以下內容:
set nocp
so $HOME/.vim/plugin/netrwPlugin.vim
然後執行 netrw 如下:
vim -u netrw.vimrc --noplugins -i NONE [some path here]
執行你需要執行的任何 netrw 命令,並檢查問題是否仍然存在。此程序避開了由於個人 .vimrc 設定、.viminfo 檔案和其他外掛程式所引起的任何問題。如果問題沒有出現,則你需要確定你的 .vimrc 中的哪個設定與 netrw 衝突,或哪個(哪些)外掛程式涉及其中。
步驟 3:如果問題仍然存在,則從 netrw 取得除錯追蹤:
1. 取得 <Decho.vim> 腳本,可從以下網址取得:
Decho.vim 以 "vimball" 形式提供。你應該編輯 Decho.vba.gz 檔案並在其中載入它:
vim Decho.vba.gz
:so %
:q
2. 若要在 netrw 中開啟除錯追蹤,請編輯 <netrw.vim> 檔案,方法是輸入:
vim netrw.vim
:DechoOn
:wq
若要還原為正常的非除錯行為,請重新編輯 <netrw.vim> 並輸入:
vim netrw.vim
:DechoOff
:wq
此命令由 <Decho.vim> 提供,它會註解掉所有 Decho 除錯語句 (`Dfunc()`, `Dret()`, `Decho()`, `Dredir()`)。
3. 然後啟動 vim 並嘗試透過執行傳輸或執行一些瀏覽來引發問題。應該會出現一組訊息,說明 <netrw.vim> 在嘗試透過網路讀取/寫入你的檔案時所採取的步驟,並顯示在另一個標籤頁或伺服器 vim 視窗中。
變更 netrw.vimrc 檔案以包含 Decho 外掛程式:
set nocp
so $HOME/.vim/plugin/Decho.vim
so $HOME/.vim/plugin/netrwPlugin.vim
你應該繼續使用以下命令執行 vim:
vim -u netrw.vimrc --noplugins -i NONE [some path here]
以避免與選項和其他外掛程式糾纏。
若要儲存檔案:在 linux 下,輸出將會在另一個遠端伺服器視窗中;在其中,只需使用以下命令儲存檔案:
:w! DBG
在不支援客戶端/伺服器的 vim 下,你的除錯輸出將會顯示在另一個標籤頁中。
:tabnext
:set bt=
:w! DBG
此外,如果你輸入以下命令會很有幫助:
:Dsep <command>
其中 <command>
是你接下來要輸入的命令,這樣更容易將除錯追蹤的哪個部分與哪個命令相關聯。
v172: Sep 02, 2021 * (Bram Moolenaar) Changed "l:go" to "go" * (Bram Moolenaar) no need for "b" in netrw-safe guioptions Nov 15, 2021 * removed netrw_localrm and netrw_localrmdir references Aug 18, 2022 * (Miguel Barro) improving compatibility with powershell v171: Oct 09, 2020 * included code in s:NetrwOptionsSafe() to allow
'bh' to be set to delete when rather than hide when g:netrw_fastbrowse was zero. * Installed
g:netrw_clipboard setting * Installed option bypass for
'guioptions' a/A settings * Changed popup_beval() to popup_atcursor() in netrw#ErrorMsg (lacygoill). Apparently popup_beval doesn't reliably close the popup when the mouse is moved. * VimEnter() now using win_execute to examine buffers for an attempt to open a directory. Avoids issues with popups/terminal from command line. (lacygoill) Jun 28, 2021 * (zeertzjq) provided a patch for use of xmap,xno instead of vmap,vno in netrwPlugin.vim. Avoids entanglement with select mode. Jul 14, 2021 * Fixed problem addressed by tst976; opening a file using tree mode, going up a directory, and opening a file there was opening the file in the wrong directory. Jul 28, 2021 * (Ingo Karkat) provided a patch fixing an E488 error with netrwPlugin.vim (occurred for vim versions < 8.02) v170: Mar 11, 2020 * (reported by Reiner Herrmann) netrw+tree would not hide with the ^\..* pattern correctly. * (Marcin Szamotulski) NetrwOptionRestore did not restore options correctly that had a single quote in the option string. Apr 13, 2020 * implemented error handling via popup windows (see popup_beval()) Apr 30, 2020 * (reported by Manatsu Takahashi) while using Lexplore, a modified file could be overwritten. Sol'n: will not overwrite, but will emit an
E37 (although one cannot add an ! to override) Jun 07, 2020 * (reported by Jo Totland) repeatedly invoking :Lexplore and quitting it left unused hidden buffers. Netrw will now set netrw buffers created by :Lexplore to
'bh'=wipe. v169: Dec 20, 2019 * (reported by amkarthik) that netrw's x (
netrw-x) would throw an error when attempting to open a local directory. v168: Dec 12, 2019 * scp timeout error message not reported, hopefully now fixed (Shane Xb Qian) v167: Nov 29, 2019 * netrw does a save&restore on @* and @+. That causes problems with the clipboard. Now restores occurs only if @* or @+ have been changed. * netrw will change @* or @+ less often. Never if I happen to have caught all the operations that modify the unnamed register (which also writes @*). * Modified hiding behavior so that "s" will not ignore hiding. v166: Nov 06, 2019 * Removed a space from a nmap for "-" * Numerous debugging statement changes v163: Dec 05, 2017 * (Cristi Balan) reported that a setting (
'sel') was left changed * (Holger Mitschke) reported a problem with saving and restoring history. Fixed. * Hopefully I fixed a nasty bug that caused a file rename to wipe out a buffer that it should not have wiped out. * (Holger Mitschke) amended this help file with additional
g:netrw_special_syntax items * Prioritized wget over curl for g:netrw_http_cmd v162: Sep 19, 2016 * (haya14busa) pointed out two syntax errors with a patch; these are now fixed. Oct 26, 2016 * I started using mate-terminal and found that x and gx (
netrw-x and
netrw-gx) were no longer working. Fixed (using atril when $DESKTOP_SESSION is "mate"). Nov 04, 2016 * (Martin Vuille) pointed out that @+ was being restored with keepregstar rather than keepregplus. Nov 09, 2016 * Broke apart the command from the options, mostly for Windows. Introduced new netrw settings:
g:netrw_localcopycmdopt g:netrw_localcopydircmdopt g:netrw_localmkdiropt g:netrw_localmovecmdopt Nov 21, 2016 * (mattn) provided a patch for preview; swapped winwidth() with winheight() Nov 22, 2016 * (glacambre) reported that files containing spaces weren't being obtained properly via scp. Fix: apparently using single quotes such as with "file name" wasn't enough; the spaces inside the quotes also had to be escaped (ie. "file\ name"). * Also fixed obtain (
netrw-O) to be able to obtain files with spaces in their names Dec 20, 2016 * (xc1427) Reported that using "I" (
netrw-I) when atop "Hiding" in the banner also caused the active-banner hiding control to occur Jan 03, 2017 * (Enno Nagel) reported that attempting to apply netrw to a directory that was without read permission caused a syntax error. Jan 13, 2017 * (Ingo Karkat) provided a patch which makes using netrw#Call() better. Now returns value of internal routines return, for example. Jan 13, 2017 * (Ingo Karkat) changed netrw#FileUrlRead to use
:edit instead of
:read. I also changed the routine name to netrw#FileUrlEdit. Jan 16, 2017 * (Sayem) reported a problem where :Lexplore could generate a new listing buffer and window instead of toggling the netrw display. Unfortunately, the directions for eliciting the problem weren't complete, so I may or may not have fixed that issue. Feb 06, 2017 * Implemented cb and cB. Changed "c" to "cd". (see
netrw-cb,
netrw-cB, and
netrw-cd) Mar 21, 2017 * previously, netrw would specify (safe) settings even when the setting was already safe for netrw. Netrw now attempts to leave such already-netrw-safe settings alone. (affects s:NetrwOptionRestore() and s:NetrwSafeOptions(); also introduced s:NetrwRestoreSetting()) Jun 26, 2017 * (Christian Brabandt) provided a patch to allow curl to follow redirects (ie. -L option) Jun 26, 2017 * (Callum Howard) reported a problem with :Lexpore not removing the Lexplore window after a change-directory Aug 30, 2017 * (Ingo Karkat) one cannot switch to the previously edited file (e.g. with
CTRL-^
) after editing a file:// URL. Patch to have a "keepalt" included. Oct 17, 2017 * (Adam Faryna) reported that gn (
netrw-gn) did not work on directories in the current tree v157: Apr 20, 2016 * (Nicola) had set up a "nmap
<expr>
..." with a function that returned a 0 while silently invoking a shell command. The shell command activated a ShellCmdPost event which in turn called s:LocalBrowseRefresh(). That looks over all netrw buffers for changes needing refreshes. However, inside a
:map-<expr>, tab and window changes are disallowed. Fixed. (affects netrw's s:LocalBrowseRefresh()) * g:netrw_localrmdir not used any more, but the relevant patch that causes
delete() to take over was #1107 (not #1109). *
expand() is now used on
g:netrw_home; consequently, g:netrw_home may now use environment variables * s:NetrwLeftmouse and s:NetrwCLeftmouse will return without doing anything if invoked when inside a non-netrw window Jun 15, 2016 * gx now calls netrw#GX() which returns the word under the cursor. The new wrinkle: if one is in a netrw buffer, then netrw's s:NetrwGetWord(). Jun 22, 2016 * Netrw was executing all its associated Filetype commands silently; I'm going to try doing that "noisily" and see if folks have a problem with that. Aug 12, 2016 * Changed order of tool selection for handling
http://... viewing. (Nikolay Aleksandrovich Pavlov) Aug 21, 2016 * Included hiding/showing/all for tree listings * Fixed refresh (^L) for tree listings v156: Feb 18, 2016 * Changed =~ to =~# where appropriate Feb 23, 2016 * s:ComposePath(base,subdir) now uses fnameescape() on the base portion Mar 01, 2016 * (gt_macki) reported where :Explore would make file unlisted. Fixed (tst943) Apr 04, 2016 * (reported by John Little) netrw normally suppresses browser messages, but sometimes those "messages" are what is wanted. See
g:netrw_suppress_gx_mesg Apr 06, 2016 * (reported by Carlos Pita) deleting a remote file was giving an error message. Fixed. Apr 08, 2016 * (Charles Cooper) had a problem with an undefined b:netrw_curdir. He also provided a fix. Apr 20, 2016 * Changed s:NetrwGetBuffer(); now uses dictionaries. Also fixed the "No Name" buffer problem. v155: Oct 29, 2015 * (Timur Fayzrakhmanov) reported that netrw's mapping of ctrl-l was not allowing refresh of other windows when it was done in a netrw window. Nov 05, 2015 * Improved s:TreeSqueezeDir() to use search() instead of a loop * NetrwBrowse() will return line to w:netrw_bannercnt if cursor ended up in banner Nov 16, 2015 * Added a
<Plug>
NetrwTreeSqueeze (
netrw-s-cr) Nov 17, 2015 * Commented out imaps -- perhaps someone can tell me how they're useful and should be retained? Nov 20, 2015 * Added
netrw-ma and
netrw-mA support Nov 20, 2015 * gx (
netrw-gx) on a URL downloaded the file in addition to simply bringing up the URL in a browser. Fixed. Nov 23, 2015 * Added
g:netrw_sizestyle support Nov 27, 2015 * Inserted a lot of
<c-u>
s into various netrw maps. Jan 05, 2016 *
netrw-qL implemented to mark files based upon
location-lists; similar to
netrw-qF. Jan 19, 2016 * using - call delete(directoryname,"d") - instead of using g:netrw_localrmdir if v7.4 + patch#1107 is available Jan 28, 2016 * changed to using
winsaveview() and
winrestview() Jan 28, 2016 * s:NetrwTreePath() now does a save and restore of view Feb 08, 2016 * Fixed a tree-listing problem with remote directories v154: Feb 26, 2015 * (Yuri Kanivetsky) reported a situation where a file was not treated properly as a file due to g:netrw_keepdir == 1 Mar 25, 2015 * (requested by Ben Friz) one may now sort by extension Mar 28, 2015 * (requested by Matt Brooks) netrw has a lot of buffer-local mappings; however, some plugins (such as vim-surround) set up conflicting mappings that cause vim to wait. The "<nowait>" modifier has been included with most of netrw's mappings to avoid that delay. Jun 26, 2015 *
netrw-gn mapping implemented * :Ntree NotADir resulted in having the tree listing expand in the error messages window. Fixed. Jun 29, 2015 * Attempting to delete a file remotely caused an error with "keepsol" mentioned; fixed. Jul 08, 2015 * Several changes to keep the
:jumps table correct when working with
g:netrw_fastbrowse set to 2 * wide listing with accented characters fixed (using %-S instead of %-s with a
printf() Jul 13, 2015 * (Daniel Hahler) CheckIfKde() could be true but kfmclient not installed. Changed order in netrw#BrowseX(): checks if kde and kfmclient, then will use xdg-open on a unix system (if xdg-open is executable) Aug 11, 2015 * (McDonnell) tree listing mode wouldn't select a file in a open subdirectory. * (McDonnell) when multiple subdirectories were concurrently open in tree listing mode, a ctrl-L wouldn't refresh properly. * The netrw:target menu showed duplicate entries Oct 13, 2015 * (mattn) provided an exception to handle windows with shellslash set but no shell Oct 23, 2015 * if g:netrw_usetab and
<c-tab>
now used to control whether NetrwShrink is used (see
netrw-c-tab) v153: May 13, 2014 * added another
g:netrw_ffkeep usage {{{2 May 14, 2014 * changed s:PerformListing() so that it always sets ft=netrw for netrw buffers (ie. even when syntax highlighting is off, not available, etc) May 16, 2014 * introduced the
netrw-ctrl-r functionality May 17, 2014 * introduced the
netrw-:NetrwMB functionality * mb and mB (
netrw-mb,
netrw-mB) will add/remove marked files from bookmark list May 20, 2014 * (Enno Nagel) reported that :Lex
<dirname>
wasn't working. Fixed. May 26, 2014 * restored test to prevent leftmouse window resizing from causing refresh. (see s:NetrwLeftmouse()) * fixed problem where a refresh caused cursor to go just under the banner instead of staying put May 28, 2014 * (László Bimba) provided a patch for opening the
:Lexplore window 100% high, optionally on the right, and will work with remote files. May 29, 2014 * implemented :NetrwC (see
netrw-:NetrwC) Jun 01, 2014 * Removed some "silent"s from commands used to implemented scp://... and pscp://... directory listing. Permits request for password to appear. Jun 05, 2014 * (Enno Nagel) reported that user maps "/" caused problems with "b" and "w", which are mapped (for wide listings only) to skip over files rather than just words. Jun 10, 2014 *
g:netrw_gx introduced to allow users to override default "<cfile>" with the gx (
netrw-gx) map Jun 11, 2014 * gx (
netrw-gx), with
'autowrite' set, will write modified files. s:NetrwBrowseX() will now save, turn off, and restore the
'autowrite' setting. Jun 13, 2014 * added visual map for gx use Jun 15, 2014 * (Enno Nagel) reported that with having hls set and wide listing style in use, that the b and w maps caused unwanted highlighting. Jul 05, 2014 *
netrw-mv and
netrw-mX commands included Jul 09, 2014 *
g:netrw_keepj included, allowing optional keepj Jul 09, 2014 * fixing bugs due to previous update Jul 21, 2014 * (Bruno Sutic) provided an updated netrw_gitignore.vim Jul 30, 2014 * (Yavuz Yetim) reported that editing two remote files of the same name caused the second instance to have a "temporary" name. Fixed: now they use the same buffer. Sep 18, 2014 * (Yasuhiro Matsumoto) provided a patch which allows scp and windows local paths to work. Oct 07, 2014 * gx (see
netrw-gx) when atop a directory, will now do
gf instead Nov 06, 2014 * For cygwin: cygstart will be available for netrw#BrowseX() to use if its executable. Nov 07, 2014 * Began support for file://... urls. Will use
g:netrw_file_cmd (typically elinks or links) Dec 02, 2014 * began work on having mc (
netrw-mc) copy directories. Works for linux machines, cygwin+vim, but not for windows+gvim. Dec 02, 2014 * in tree mode, netrw was not opening directories via symbolic links. Dec 02, 2014 * added resolved link information to thin and tree modes Dec 30, 2014 * (issue#231)
:ls was not showing remote-file buffers reliably. Fixed. v152: Apr 08, 2014 * uses the
'noswapfile' option (requires {{{2 vim 7.4 with patch 213) * (Enno Nagel) turn
'rnu' off in netrw buffers. * (Quinn Strahl) suggested that netrw allow regular window splitting to occur, thereby allowing
'equalalways' to take effect. * (qingtian zhao) normally, netrw will save and restore the
'fileformat'; however, sometimes that isn't wanted Apr 14, 2014 * whenever netrw marks a buffer as ro, it will also mark it as nomod. Apr 16, 2014 * sftp protocol now supported by netrw#Obtain(); this means that one may use "mc" to copy a remote file to a local file using sftp, and that the
netrw-O command can obtain remote files via sftp. * added [count]C support (see
netrw-C) Apr 18, 2014 * when
g:netrw_chgwin is one more than the last window, then vertically split the last window and use it as the chgwin window. May 09, 2014 * SavePosn was "saving filename under cursor" from a non-netrw window when using :Rex. v151: Jan 22, 2014 * extended :Rexplore to return to buffer {{{2 prior to Explore or editing a directory * (Ken Takata) netrw gave error when clipboard was disabled. Sol'n: Placed several if has("clipboard") tests in. * Fixed ftp://X@Y@Z// problem; X@Y now part of user id, and only Z is part of hostname. * (A Loumiotis) reported that completion using a directory name containing spaces did not work. Fixed with a retry in netrw#Explore() which removes the backslashes vim inserted. Feb 26, 2014 * :Rexplore now records the current file using w:netrw_rexfile when returning via
:Rexplore Mar 08, 2014 * (David Kotchan) provided some patches allowing netrw to work properly with windows shares. * Multiple one-liner help messages available by pressing
<cr>
while atop the "Quick Help" line * worked on ShellCmdPost, FocusGained event handling. *
:Lexplore path: will be used to update a left-side netrw browsing directory. Mar 12, 2014 *
netrw-s-cr: use
<s-cr>
to close tree directory implemented Mar 13, 2014 * (Tony Mechylynck) reported that using the browser with ftp on a directory, and selecting a gzipped txt file, that an E19 occurred (which was issued by gzip.vim). Fixed. Mar 14, 2014 * Implemented :MF and :MT (see
netrw-:MF and
netrw-:MT, respectively) Mar 17, 2014 *
:Ntree [dir] wasn't working properly; fixed Mar 18, 2014 * Changed all uses of set to setl Mar 18, 2014 * Commented the netrw_btkeep line in s:NetrwOptionSave(); the effect is that netrw buffers will remain as
'bt'=nofile. This should prevent swapfiles being created for netrw buffers. Mar 20, 2014 * Changed all uses of lcd to use s:NetrwLcd() instead. Consistent error handling results and it also handles Window's shares * Fixed
netrw-d command when applied with ftp * https: support included for netrw#NetRead() v150: Jul 12, 2013 * removed a "keepalt" to allow ":e #" to {{{2 return to the netrw directory listing Jul 13, 2013 * (Jonas Diemer) suggested changing a
<cWORD>
to
<cfile>
. Jul 21, 2013 * (Yuri Kanivetsky) reported that netrw's use of mkdir did not produce directories following the user's umask. Aug 27, 2013 * introduced
g:netrw_altfile option Sep 05, 2013 * s:Strlen() now uses
strdisplaywidth() when available, by default Sep 12, 2013 * (Selyano Baldo) reported that netrw wasn't opening some directories properly from the command line. Nov 09, 2013 *
:Lexplore introduced * (Ondrej Platek) reported an issue with netrw's trees (P15). Fixed. * (Jorge Solis) reported that "t" in tree mode caused netrw to forget its line position. Dec 05, 2013 * Added
<s-leftmouse>
file marking (see
netrw-mf) Dec 05, 2013 * (Yasuhiro Matsumoto) Explore should use strlen() instead s:Strlen() when handling multibyte chars with strpart() (ie. strpart() is byte oriented, not display-width oriented). Dec 09, 2013 * (Ken Takata) Provided a patch; File sizes and a portion of timestamps were wrongly highlighted with the directory color when setting
:let g:netrw_liststyle=1
on Windows. * (Paul Domaskis) noted that sometimes cursorline was activating in non-netrw windows. All but one setting of cursorline was done via setl; there was one that was overlooked. Fixed. Dec 24, 2013 * (esquifit) asked that netrw allow the /cygdrive prefix be a user-alterable parameter. Jan 02, 2014 * Fixed a problem with netrw-based balloon evaluation (ie. netrw#NetrwBalloonHelp() not having been loaded error messages) Jan 03, 2014 * Fixed a problem with tree listings * New command installed:
:Ntree Jan 06, 2014 * (Ivan Brennan) reported a problem with
netrw-P. Fixed. Jan 06, 2014 * Fixed a problem with
netrw-P when the modified file was to be abandoned. Jan 15, 2014 * (Matteo Cavalleri) reported that when the banner is suppressed and tree listing is used, a blank line was left at the top of the display. Fixed. Jan 20, 2014 * (Gideon Go) reported that, in tree listing style, with a previous window open, that the wrong directory was being used to open a file. Fixed. (P21) v149: Apr 18, 2013 * in wide listing format, now have maps for {{{2 w and b to move to next/previous file Apr 26, 2013 * one may now copy files in the same directory; netrw will issue requests for what names the files should be copied under Apr 29, 2013 * Trying Benzinger's problem again. Seems that commenting out the BufEnter and installing VimEnter (only) works. Weird problem! (tree listing, vim -O Dir1 Dir2) May 01, 2013 * :Explore ftp://... wasn't working. Fixed. May 02, 2013 * introduced
g:netrw_bannerbackslash as requested by Paul Domaskis. Jul 03, 2013 * Explore now avoids splitting when a buffer will be hidden. v148: Apr 16, 2013 * changed Netrw's Style menu to allow direct {{{2 choice of listing style, hiding style, and sorting style
07/29/09 : banner :|g:netrw_banner| 可用於抑制抑制橫幅。此功能是新的且為實驗性,因此正在除錯中。09/04/09 : "gp" : 查看是否可以使其適用於遠端系統。: 查看是否可以與標記的檔案一起使用。
Bram Moolenaar 的 Vim 編輯器 (感謝,Bram!) C Campbell 的 dav 支援 Bram Moolenaar 和 C Campbell 的 fetch 支援 C Campbell <
[email protected]> 的 ftp 支援 Bram Moolenaar <
[email protected]> 的 http 支援 C Campbell 的 rcp rsync 支援 (由 Erik Warendorph 建議) raf <
[email protected]> 的 scp 支援 C Campbell 的 sftp 支援
C Campbell 貢獻的 inputsecret()、BufReadCmd、BufWriteCmd
Jérôme Augé -- 也將新的緩衝區方法用於 ftp+.netrc Bram Moolenaar -- 顯然是 vim 本身,:e 和 v:cmdarg 的使用,fetch... Yasuhiro Matsumoto -- 指出 undo+0r 問題和解決方案 Erik Warendorph -- 提出多項建議 (g:netrw_..._cmd 變數,rsync 等) Doug Claar -- 修改以測試 ftp 操作是否成功
模型行:{{{1