我研究了自己在 vim 裡的搜尋行為之後,發現了自己有兩個使用習慣,很明顯地沒有最佳化:
- 有「無意義的反白高亮度顯示」,卻沒有關閉它。
- 反覆搜尋同一個字串。
我研究了自己在 vim 裡的搜尋行為之後,發現了自己有兩個使用習慣,很明顯地沒有最佳化:
vim 有兩組功能,我覺得很適合一起使用
查找關鍵字的功能,我是安裝 ack.vim 。設定好之後,就可以下 :Ack 指令來找。有比對到關鍵字的檔案,就會在 Quickfix List 裡列出,而且可以用上下鍵來選擇開啟。於是,這時候下列的一組 Quickfix List 專用的指令,就值得記憶了。
搭配指令
:copen => 打開 Quickfix 窗口,顯示所有結果
:cclose, :ccl => 關閉 Quickfix 窗口
如果 vim 配合 language server protocol 來使用的話,可以有查找「函數引用」的功能,我使用的 vim plugin 會將函數引用列在 Location list 裡。於是,這時候下列的一組 Location List 專用的指令,就值得記憶了。
搭配指令
:lopen => 打開 Location 窗口,顯示所有結果
:lclose, :lcl => 關閉 Location 窗口
上述的功能,就很容易開啟許多的 buffers (即開啟後正在編輯的檔案),於是我們如果想要看到,現在開啟了哪些 buffers ,就可以下 :ls 來看,目前有哪些檔案被開啟。
搭配指令
:ls => 看有哪些檔案被開啟成為 buffer
:b [數字id] => 顯示對應該 id 的檔案
:e [檔名] => 開啟特定檔案
:bd => 關閉目前的 buffer
我朋友很欣賞 37 signals 公司的工作哲學 ---「塑造工作」,推荐給我看。(37 signals 公司是間一流的 web application 公司)
該書對於軟體工作倡議的分工方式,我認為相當的有道理。杜拉克曾經有一篇文章探討如何提高知識工作者的產出? 該文提到了幾個重點:
1. 界定任務
2. 專注於核心工作
3. 界定績效
4. 管理者與知識工作者建立夥伴關系
杜拉克來自實務的觀察自然有其道理,但是,要怎麼應用在軟體開發上呢?對於軟體開發的實務來講,十次中有九次,往往都牽扯到未知的實驗與探索,換言之,軟體開發的實務之中,往往帶有一定的科學理論建構性質。有了未知性質的工作,任務難以界定;而邊界難以界定清楚的工作,績效又該如何界定呢?我在過往工作的經驗之中,往往只能使用「專注核心工作」的原則,對於其它三項原則,往往只聽樓梯響,不見人下樓。
「塑造工作」一書提出的解決之道相當有特色:將團隊拆分成「資深團隊」與「循環團隊」。「資深團隊」負責塑造工作,塑造完成的工作,應該是已經將高風險與未知的部分移除、可以在 6 週之內完成的明確開發工作。塑造完成的工作,交給「循環團隊」去開發,而循環團隊的任務則是要在 6 週內完成開發任務。
從界定任務與績效的角度來看,資深團隊的任務是要正確地塑造工作。而循環團隊的工作則是準時地把塑造完成的工作加以交付。這正也符合了杜拉克說過的,「規畫」與「執行」應該分開來做。有了明確的任務界定,界定明確的績效也因此可能發生。(註:杜拉克同時也說:『分開來做,是指在不同的時間做,但是,不一定要交給不同的人來做。』)
從夥伴關系的角度來看,上述的資深團隊,一方面帶有中階管理階層的屬性,因為他們的任務要決定『去做什麼與不做什麼』。更重要的是,他們也是該領域中極為卓越的知識工作者,否則,勢必沒有足夠的能力,來為循環團隊塑造可以達成的工作。管理者與知識工作者兩個不同的身分放在同一個腦子裡,自然可以形成夥伴關系。
Clojure 的官方出了自己的 build tool 。老實說,我一直都覺得,比起 leiningen 來得沒有那麼容易上手。經過一些調整之後,總算是覺得還可以啦,就是多學一些東西嘛。主要有幾個需要調整的地方:
第一個問題,我的解法是安裝 clj-new 這個 alias 。裝完之後,就可以用下列的指令來生成 project
clojure -X:new :name myname/myapp ;; 生成專案
cd myapp
clojure -M -m myname.myapp ;; 啟動
第二個問題,我的解法是設定對應的 alias 。網路上我找到相對完整豐富的範例是 practicalli/clojure-deps-edn
第三個問題:我用 ack-grep 時,常常都會掃瞄一堆暫存檔,妨礙我取得關鍵的資訊。於是,我設定了 ack-grep 的 config ,直接設定不搜尋這些暫存檔。我的 .ackrc 如下
# Tips:
# using ack to show only the clojure files for further processing
# ack -f --clojure
#
--ignore-dir=resources
--ignore-dir=.shadow-cljs
--ignore-dir=.cpcache
Clojure 的世界裡,常用的依賴注入 (dependency injection) 手法主要有五種:
這五種手法都頗為重要:
由於新工作的資安規定,硬碟要加密,我決定全心全意地來改用 Mac book 。研究了一陣子之後,發現還真的滿多需要且值得記憶的:
1. 截圖類
cmd + shift + 3 --- screen shot
cmd + shift + 4 --- screen shot with area
cmd + shift + 5 --- screen record
2. Finder 類
cmd + <up> --- 往上移一層資料夾
cmd + [ --- 回到前一個資料夾 // 同時也適用於 browser
cmd + alt + L --- 到「下載資料夾」 // 同時也適用於 browser
3. 文字編輯器
cmd + <left> --- 移動到行首
cmd + <right> --- 移動到行尾
cmd + <up> --- 移動到文章首
cmd + <down> --- 移動到文章尾
cmd + shift + T --- 切換 .txt 與 .rtf (存檔的格式)
cmd + T --- 顯示字型
cmd + shift + C --- 顯示色碼
cmd + V --- 貼上 with formatting
cmd + alt + shift + V --- 貼上 without formatting
4. 一般應用程式
cmd + <Comma> --- 偏好設定
cmd + Q --- 關閉應用程式
5. 移動類
fn + <up> --- Page Up
fn + <down> --- Page Down
fn + <left> --- Home
fn + <right> --- End
6. 其它
cmd + <Space> --- Spotlight search
cmd + shift + ESC --- 強制關閉應用程式
cmd + ctrl + Q --- lock screen