2025年4月16日 星期三

Vim 最後一哩路

陸續搞定了 netrw 的一些功能,寫了幾個函數來幫忙,終於對 Vim script 有點感覺了。


雖然回復 cursor 的方法還有點鳥,但目前找不到適合的 event 來監聽,只好勉強先用 Vimresized 頂著先,壞處就是要一個 count 來計算何時該清空變數。


總之,開啟檔案到右邊視窗會觸發第一次,關閉右邊視窗又會觸發第二次,所以當 count == 2 時,我才能放心清空此變數。

現在大概只差寫 Plugin 的經驗了XD

2025年4月10日 星期四

Vim 內建 file tree view - Netrw

最近突然發現 Vim 內建的檔案總管,其實已經很夠用了,只要多設定下面幾個全域變數,臨時要瀏覽檔案還算行。

let g:netrw_keepdir = 0
let g:netrw_banner = 0
let g:netrw_winsize = 30
let g:netrw_browse_split = 3

雖然我可以拿到目前 Netrw 指到的檔案名稱,但不太確定要如何操作 Vim 的視窗還是緩衝區來達到 IDE 的介面?


沒關係,我已經比以前的我還進步了XD

不過還是改不了長久以來使用 UltraEdit 的習慣,即使知道快速鍵的使用,但還是很習慣使用方向鍵、delete、backspace。

目前也還沒養成習慣,不編輯時常保持在 Normal Mode。

2025/04/11 更新

今天終於看懂如何改 netrw 顏色了XD


我們只要知道 netrw 的 define 是什麼或是他 link 到那個。

比如說 netrwDir 是 link 到 Directory,故我可以直接改 Directory。

但是像 netrwExe 是 link 到 PreProc,這跟我 Coding 顏色相衝,故我重新定義一個 MKExe,改將 netrwExe link 到 MKExe 即可。

詳情可以參考 vim/syntax/netrw.vim。

2025/04/12 更新

原來 NERDTree 也還好,重點是速度比 netrw 慢(git bash on Windows)。

今天多加了一個視情況改變 statusline 的檢查,看起來舒服多了。


Vim 果然是編輯器之神!

2025/04/16 更新

加入自動增測 winwidth 功能,並可以開啟檔案到右邊視窗,回來也可以順利記住游標位置,目前總算有點樣子了。

2025年4月4日 星期五

Python 工匠案例、技巧與開發實戰

雖然我是很想直接用 Tcl 單幹寫出現在要寫的 EDA Flow Tool?

不過考量到之後可能要一起協同合作,還是使用最大公約數的 Python 語言?

個人不是寫 Python 的,於是便看了一本買了很久但還沒看的書,也就是如標題所述的書。

不得不說,只要幾百塊的金額,便可以學到原本沒接觸過的知識實在是很划算。

據我之前理解,要稱得上是 Python 進階使用者,大概要知道下面兩個技巧:

01. 生成式的使用
02. 裝飾器的使用

不過,我到現在一個都沒用過。

個人覺得只要能把程式用不同的函數來清楚表達,這樣就已經屌打很多人了XD

因此,我們需要一個方法來檢查我們的函數是否有達到上列目的,剛好這本書在函數這一章節,介紹了一個 package - radon,它可以給函數一個分數,這樣我們就知道函數是否可以改進?

之前做財委時,為了將新補上的歷史資料填上我 Excel 前面的總表分析 sheet,於是便用 Python 寫了一支程式,當然這支程式還有別的功能就是。

總之,目前程式碼為 469 行,下面是我執行 radon cc -s xxx.py 的結果。


從上面可以看到,我有 5 支函數稍嫌複雜,只拿到 B 的分數,原則上最好都拿到 A 的分數是比較好的。


在這 469 行的程式中,扣掉 main 用了 17 個函數,一個函數平均大概不會超過 50 行,即使這樣,也不能保證我每個函數都能拿到 A 的分數。


其中以 adjust_cell_format 最為明顯,雖然行數只有 23 行,但我這支函數拿到的分數最差。

正常來說,應該比照 columns,將對齊方式也用 list 記錄,這樣就可以少掉 42 行與 45 行的 if statement。

但要說這支函數不好懂嗎?我也不太確定,至少這個程式已經是一年多前寫的,當我需要新增功能時,回過頭來再看一次函數也不會有多大困難就是了。

在不斷的思考與自我對話中,程式設計之道也會越來越清楚吧?我想…