笨辦法學(xué) Python · 續(xù) 練習(xí) 50:`vi`

練習(xí) 50:vi

原文:Exercise 50: vi

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

自豪地采用谷歌翻譯

你有一個模塊芦缰,實(shí)現(xiàn)了edsed中使用的功能。顯然墨榄,下一步是實(shí)現(xiàn)世界歷史上最討厭和實(shí)用的文本編輯器:vi貌夕。如果你知道 Lisp 可以實(shí)現(xiàn) Emacs,但沒有人有時間創(chuàng)建一個偽裝成文本編輯器的全新操作系統(tǒng)胡桃。人生苦短食绿,不能整天按住三個按鍵并敲擊 TAB 鍵侈咕。

這個練習(xí)的目的不是做一個非常精確的vi的副本。這是一個非常大的項(xiàng)目器紧,但如果你想嘗試它耀销,那么就去做吧。你這個項(xiàng)目中的目標(biāo)是铲汪,再次復(fù)用你的ed模塊树姨,并玩轉(zhuǎn) Python 的 curse 模塊。curse模塊讓你處理舊式的文本終端窗口和圖形操作桥状。實(shí)際上“圖形”應(yīng)該加引號帽揪,因?yàn)?code>curse中的實(shí)際圖形很少。

你將使用curse來創(chuàng)建一個低級的vi實(shí)現(xiàn)辅斟,它可以打開文件转晰,使用模塊運(yùn)行edsed命令,并使用curse將其顯示到終端屏幕士飒。你也會發(fā)現(xiàn)查邢,嘗試自動化測試它是非常困難的。如果你能弄清楚如何做一個假的curse測試框架酵幕,你會得到附加分扰藕,但是這將需要 Unix pty 系統(tǒng)的一些魔術(shù)技巧(我認(rèn)為)。

使其可測試的更好方法是芳撒,將盡可能多的vi放入 Python 模塊邓深,以便你可以測試代碼,而無需運(yùn)行curses屏幕系統(tǒng)笔刹。當(dāng)我說“模塊”時芥备,我并不意味著一個完整的 Python 模塊,像使用ed模塊一樣舌菜,你可以使用pip安裝它萌壳。我的意思是vi的代碼中的模塊,然后導(dǎo)入到你的項(xiàng)目中。

思考這個項(xiàng)目的方法是袱瓮,將控制視圖(curses)的代碼與其余代碼分開缤骨,以便你可以插入自己的假視圖來測試。之后還剩下少量的功能尺借,你可以通過實(shí)際運(yùn)行你的vi來手動測試荷憋。

挑戰(zhàn)練習(xí)

我們不會實(shí)現(xiàn)整個vi。我需要把它說清楚褐望,因?yàn)閷?shí)際的vi是舊的,非常復(fù)雜串前,所以實(shí)現(xiàn)一個完整的“代碼大師副本”將需要很長時間瘫里。你實(shí)際上只做以下事情:

  • 獲取你的ed模塊。
  • 為其創(chuàng)建一個cursesUI荡碾。
  • 使其在多個文件上工作谨读。

這或多或少是你正在做的事情,所以你應(yīng)該關(guān)注的第一件事是坛吁,curses如何工作劳殖。閱讀curses的文檔,來了解它的工作原理拨脉,并根據(jù)需要編寫盡可能多的測試來了解它哆姻。

一旦你掌握了curses,你就需要學(xué)習(xí)如何使用vi玫膀。我為這個練習(xí)包括一個vi速成課矛缨,你可以觀看它,還有幾個可以在線參考的vi速查表帖旨。我建議你看我的vi教程箕昭,并且在這個會話期間,嘗試使用真正的vi來編輯代碼解阅。實(shí)際上從你的edsed的實(shí)現(xiàn)中落竹,你可以了解vi如何工作。理論上货抄,vi僅僅是圖形化的ed述召,所以你幾乎只是向ed提供一個更好的 UI。

研究性學(xué)習(xí)

  • 你的ed實(shí)現(xiàn)中的有限狀態(tài)機(jī)蟹地,如何與這個vi實(shí)現(xiàn)中的東西相匹配桨武?假設(shè)你使用了這個設(shè)計(jì)。
  • 實(shí)現(xiàn) GUI 版本而不是curses锈津,有多難呀酸?我不建議你這樣做,但研究它琼梆,看看它需要什么性誉。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窿吩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子错览,更是在濱河造成了極大的恐慌纫雁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倾哺,死亡現(xiàn)場離奇詭異轧邪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)羞海,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門忌愚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人却邓,你說我怎么就攤上這事硕糊。” “怎么了腊徙?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵简十,是天一觀的道長。 經(jīng)常有香客問我撬腾,道長螟蝙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任民傻,我火速辦了婚禮胶逢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饰潜。我一直安慰自己初坠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布彭雾。 她就那樣靜靜地躺著碟刺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪薯酝。 梳的紋絲不亂的頭發(fā)上半沽,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音吴菠,去河邊找鬼者填。 笑死,一個胖子當(dāng)著我的面吹牛做葵,可吹牛的內(nèi)容都是我干的占哟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榨乎!你這毒婦竟也來了怎燥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜜暑,失蹤者是張志新(化名)和其女友劉穎铐姚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肛捍,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隐绵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拙毫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片依许。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恬偷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帘睦,我是刑警寧澤袍患,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站竣付,受9級特大地震影響诡延,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜古胆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一肆良、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逸绎,春花似錦惹恃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至颊乘,卻和暖如春参淹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乏悄。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工浙值, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人檩小。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓开呐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子负蚊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

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