vim 從嫌棄到依賴(12)——打開及保存文件

在前幾篇文章中耙册,我們從vim各種模式的使用著手介紹了vim如何進行文本本身的編輯。也通過緩沖區(qū)列表的介紹了解到了vim是如何進行打開文件的管理。這篇我們將會著眼于文件的打開和保存的基本操作贾费。通過這篇的閱讀吕世,我們可以正式開始嘗試將vim用做代碼編輯器,而不再是像之前那樣作為普通的文本編輯器戴陡。

開始前的準備

先來介紹一下vim的工作目錄的概念塞绿。我們知道進程都有自己的工作目錄,后續(xù)需要操作某個目錄的時候恤批,可以根據(jù)這個工作目錄使用相對路徑异吻。這樣的好處是比較靈活,只要我們的文件按照一定的規(guī)則進行組織喜庞,后續(xù)可以更換程序可執(zhí)行文件所在路徑而不用更新代碼诀浪。

vim自己也有一個工作目錄的概念,可以通過:pwd 來查看當前vim的工作目錄是哪個延都,一般來說我們是從shell中的哪一個目錄中進入的vim雷猪,那么vim的工作目錄就是哪個。

為了展示vim是如何進行目錄和文件管理的晰房,這里我準備通過我之前在github上托管的自己的vim配置文件來進行演示求摇,nvim-config 各位小伙伴可以下載進行實驗酵颁,以便達到與教程保持相同效果。也可以采用自己的實際項目進行實驗月帝。這里我多說一句躏惋,我并不推薦各位采用這個配置,第一個原因在于這個配置并沒有完全完成嚷辅,算是一個半成品簿姨。第二個原因是這個配置并不能完美的符合各位的工作流和工作習慣。我們學習vim簸搞、學習vim的配置主要是為了結(jié)合自己的工作習慣和工作流形成一套符合自己習慣的操作方式扁位,并不推薦大家照搬里面的配置。第三個原因是趁俊,在后續(xù)我想寫一系列的從0開始配置vim的文章域仇,幫助大家完成自己的配置。

edit命令

打開一個文件可以通過:edit {filename} (或者簡寫為 :e ) 寺擂。如果filename采用絕對路徑暇务,那么打開的就是絕對路徑所對應的文件,如果是相對路徑怔软,那么就可以打開相對與vim工作目錄的文件垦细。

例如我們想打開項目中的基礎配置文件lua/basic/settings.lua,就可以執(zhí)行:edit lua/basic/settings.lua。根據(jù)我們前面所學的內(nèi)容挡逼,vim的命令模式是支持自動補全的括改,我們可以通過tab來快速補全路徑

1.gif

假設現(xiàn)在已經(jīng)打開了這個文件,我想打開它同級目錄下的keybinds.lua 來配置快捷鍵的話家坎,我要同樣的輸入:edit lua/basic/keybinds.lua嘱能。本來我已經(jīng)打開了與它同級目錄中的 settings.lua 了,我為了打開keybinds.lua 要輸入這么大一堆虱疏,如果我能以當前settings.lua 的路徑作為相對路徑就好了惹骂。

vim 在命令行中提供了一個% 作為活動緩沖區(qū)的完整路徑。我們在直接介紹命令模式的時候订框,%是作為范圍表示當前打開的整個文本析苫。這里它作為路徑參數(shù)的話,表示的是當前打開文本的完整路徑穿扳。

我們可以通過 :edit %<Tab> 來自動顯示整個路徑衩侥,然后通過<C-w> 來刪除單詞,直到刪除到當前目錄矛物,然后再輸入keybinds.lua 就可以了

2.gif

用這種方法是簡單了點茫死,但是最后還要刪除個文件名,上面我們按了3次<C-w>,也挺麻煩的履羞。有沒有什么方法可以直接定位到對應的目錄峦萎,讓我直接輸入文件名呢屡久?可以通過 在%的后面加上:h 來自動去掉文件名,即輸入:edit %:h<Tab> 來自動出現(xiàn)對應的目錄爱榔。這個功能還是挺有用的被环,但是需要輸入這么多內(nèi)容,為了簡化它你肯定也想到了详幽,要給它配置快捷鍵筛欢。這里還是留到以后再講解它的使用。

3.gif

find命令

即使:edit 命令有% 這種操作來簡便輸入唇聘,但是在打開其他目錄中的文件時仍然需要輸入完整的目錄和文件名版姑,這個操作也是挺繁瑣的。

操作系統(tǒng)中迟郎,有一個PATH 環(huán)境變量剥险,輸入命令的時候,他會在PATH 所指定的目錄中查找對應命令宪肖。vim中也有類似的概念表制。

vim中可以使用:find,根據(jù)輸入的文件名打開文件匈庭。但是使用:find 的前提是配置path 變量夫凸。它們合作完成打開文件的操作,與環(huán)境變量的用法類似阱持。

可以輸入:set path+=./** 將當前工作目錄以及它下面的所有子目錄。然后可以直接輸入:find keybinds.lua 打開這個文件了魔熏。

4.gif

你可能會問衷咽,如果項目中有相同的文件名呢,這個項目里面沒有同名文件蒜绽,這里我們在lua/basic 目錄中新建一個init.lua 這樣它就與根目錄下的init.lua 相同了镶骗。我們輸入:find init.lua ,它會打開當前文件所在目錄附近的同名文件。例如如果當前打開的文件在lua/basic 目錄中躲雅,那么它會打開nvim-config/lua/basic/init.lua 鼎姊,如果當前打開文件在nvim-config 中,它會打開nvim-config/init.lua相赁。也可以在輸入完init.lua 之后相寇,按下<Tab> 它會提示所有匹配到的文件。我們可以指定位置的文件打開钮科。

5.gif

在我們不斷使用tab來匹配會出現(xiàn)3個匹配項:init.lua唤衫、./init.lua、./lua/basic/init.lua绵脯。他們分別對應著上面所說的那個匹配的文件佳励,以及其他兩個不同位置的文件休里。

vim自帶的目錄管理工具

在一般的ide中,左側(cè)或者右側(cè)會以樹的形式顯示項目中的目錄赃承。vim中也有這樣的功能妙黍。它是vim提供的一個名為netrw 插件。

我們打開一個目錄就可以看到瞧剖,它在窗口中顯示該目錄中的文件結(jié)構(gòu)拭嫁。它與普通的緩沖區(qū)窗口一樣,可以通過motion 操作來移動光標筒繁。也支持命令行模式噩凹,但是這個緩沖區(qū)是不可修改的,也無法保存毡咏。在該窗口中驮宴,隨意選擇一行按下回車,如果選擇的是一個文件呕缭,那么它會打開該文件堵泽,如果是目錄那么窗口中則會進入該目錄并顯示目錄內(nèi)容。

6.gif

我們可以像打開一個普通的文本文件那樣打開一個目錄恢总,二者的區(qū)別僅僅在于顯示的內(nèi)容不同迎罗,某些行為不同而已。如果當前已經(jīng)打開了一個文件片仿,我想再繼續(xù)顯示這個目錄呢纹安?相信各位小伙伴已經(jīng)猜到了,既然可以以打開普通文件的方式打開新的目錄砂豌,那么我使用:edit 命令厢岂,在后面加入目錄路徑是不是就可以了。

7.gif

經(jīng)過實驗阳距,確實是這樣呢塔粒。看到?jīng)]筐摘,vim就是這樣卒茬,一旦理解了它的邏輯,很多東西自己就能猜到咖熟。當然vim也提供了:Explore 專門用來顯示目錄結(jié)構(gòu)圃酵。它可以簡寫為:E 后面不加任何東西可以打開當前文件所在目錄,也可以加上路徑打開指定目錄球恤。

如果我們想要像普通編輯器那樣將目錄結(jié)構(gòu)放到左邊怎么辦呢辜昵?套用打開文件的方式,各位肯定能想到使用:vsplit 加上目錄名咽斧。vim也提供了一組命令:Sexplore:Vexplore 分別在水平和豎直方向打開目錄堪置。

8.gif

vim自帶的這個目錄管理工具最大的問題是我通過回車鍵從里面選擇一個之后躬存,會在當前窗口打開一個新的緩沖區(qū),并且把目錄樹給覆蓋了舀锨,這個時候我們可以快速按下<Ctrl + Shift>^ 來在新打開的緩沖區(qū)和目錄樹之間切換岭洲。

除了瀏覽目錄結(jié)構(gòu)以外,也可以利用該插件進行文件和目錄的創(chuàng)建坎匿、刪除盾剩、修改、重命名等操作替蔬,例如告私,使用% 來創(chuàng)建文件, d 來創(chuàng)建目錄,R 重命名或者移動目錄和文件承桥,使用 D 來刪除一個目錄或者文件

vim自帶的目錄管理工具雖然提供了各種功能驻粟,但是并不是特別好用,我們有眾多的第三方工具可以使用凶异。這個留著等到介紹配置的時候再說蜀撑。一次性講太多了顯得太雜,而且我想用一個懸念留住各位讀者剩彬,也用它來吸引新的讀者酷麦,這也算是我一點小小的私心吧。

寫入文件的一些小技巧

寫入不存在的目錄中

我們在原項目的基礎之上打開一個新的有不存在目錄的文件喉恋,例如:e random/111/test.txt沃饶。

9.gif

我們成功的進入了vim的編輯界面,我們也可以進行編輯轻黑,但是一旦執(zhí)行寫命令的時候绍坝,發(fā)現(xiàn)vim會提示目錄不存在。它保存文件需要將文件保存到一個已經(jīng)存在的目錄中苔悦。

我們可以退出vim,然后使用mkdir 來新建目錄椎咧。這個是下下策玖详,之前輸入的內(nèi)容全丟失了,再重新來一遍實在是令人惱火勤讽,不瞞各位蟋座,我之前就是這么干的,所以我養(yǎng)成了脚牍,新打開一個文件就立馬執(zhí)行:w 的習慣向臀。

還記得之前講過怎么在vim中執(zhí)行shell命令嗎,不想退出vim诸狭,又想在保存前創(chuàng)建目錄券膀,可以使用這招, :!mkdir -p random/111, 然后再執(zhí)行寫入君纫。或者可以靈活的使用在前面介紹的:%h 來快速補全相對路徑

10.gif

強制以root用戶寫入文件

有時候我們使用vim打開了系統(tǒng)文件芹彬,例如打開了/etc/hosts 文件蓄髓,但是保存的時候意識到忘了加sudo 了,導致無法寫入舒帮,我以前的辦法是先退出会喝,然后再用root權(quán)限打開,這樣就導致之前輸入的內(nèi)容全都丟失了玩郊,幸虧我養(yǎng)成了前面說的那個習慣肢执,打開文件之后的第一步就是執(zhí)行:w,在學習了vim的命令模式之后,估計各位小伙伴已經(jīng)有思路來解決這個問題了译红。

我們以當前文件內(nèi)容作為命令輸入预茄,配合shell命令,完成临庇。我們知道可以使用tee 來將輸入內(nèi)容寫入文件中反璃。那么我們的命令可以是 :w !sudo tee % > /dev/null, 我們使用:w 來指定當前緩沖區(qū)的內(nèi)容作為shell命令的輸入。然后配合tee 來將內(nèi)容寫入到% 也就是當前文件假夺。

寫入文件之后vim會檢測到該文件已經(jīng)被外部的程序修改了淮蜈,本例中它被 tee 命令修改了,因此這個時候vim會提示我們文件已經(jīng)被外部程序修改已卷,需要重新載入文件還是使用當前緩沖區(qū)的內(nèi)容梧田。因為這里我們是將緩沖區(qū)內(nèi)容直接覆蓋到文件里面,二者的內(nèi)容是一樣的侧蘸,使用哪個都行裁眯。由于neovim中該操作可能有問題,會報錯讳癌,這里就不演示了穿稳,使用vim的小伙伴可以試試這個方法。后續(xù)我們可以使用擴展插件來解決這個問題晌坤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逢艘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子骤菠,更是在濱河造成了極大的恐慌它改,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件商乎,死亡現(xiàn)場離奇詭異央拖,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門鲜戒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來专控,“玉大人,你說我怎么就攤上這事袍啡〔裙伲” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵境输,是天一觀的道長蔗牡。 經(jīng)常有香客問我,道長嗅剖,這世上最難降的妖魔是什么辩越? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮信粮,結(jié)果婚禮上黔攒,老公的妹妹穿的比我還像新娘。我一直安慰自己强缘,他們只是感情好督惰,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旅掂,像睡著了一般赏胚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上商虐,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天觉阅,我揣著相機與錄音,去河邊找鬼秘车。 笑死典勇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的叮趴。 我是一名探鬼主播割笙,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼眯亦!你這毒婦竟也來了咳蔚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤搔驼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侈询,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舌涨,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了囊嘉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片温技。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扭粱,靈堂內(nèi)的尸體忽然破棺而出舵鳞,到底是詐尸還是另有隱情,我是刑警寧澤琢蛤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布蜓堕,位于F島的核電站,受9級特大地震影響博其,放射性物質(zhì)發(fā)生泄漏套才。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一慕淡、第九天 我趴在偏房一處隱蔽的房頂上張望背伴。 院中可真熱鬧,春花似錦峰髓、人聲如沸傻寂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眉孩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浪汪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工死遭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留广恢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓钉迷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親糠聪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容