最近在練習 WebStorm / Tennis 的速度(目前 10 分半)
想使用 “邪教觸控板” 超越 “傳說 vim”
不過 Vim 真的不是我的愛,加上 Mac 鍵盤搭配 Vim 真的很痛苦
尤其是那難用的 ESC 及 Touch Bar
後來決定使用觸控板搭配 Web Storm 特性
試圖將速度有效的提升
遇到的問題及解決辦法:
1. 滑鼠 / 觸控板會慢,是因為需要找游標以及需要瞄準
但純粹游標瞄準絕對不是問題
想想各位都可以在 CS 等射擊遊戲中
使用狙擊槍 0.5 秒甩槍爆頭
沒道理這個技能在開發中無法運用
問題在於預設情況,打字狀態下游標是會被隱藏的(Mac 是如此
遊戲中,游標是穩定在畫面的中央,所以反應才能那麼快
只要能夠穩定的了解目前游標位置
自然就能加速使用觸控板 / 滑鼠開發
(因此我在游標上加了O,永遠掌握它的位置)
2. 自動格式化、分號、存檔、測試等重複流程
在 極速開發 課程中介紹到 Vim 指令搭配 Web Storm
使用組合鍵的形式呼叫 Web Storm 的多個方法
可以有效使用少數幾個按鈕就執行多個行為
如果是沒有使用 Vim 則可以使用 Macro
類似錄製的方式,將特定的 Action 記錄起來
再透過熱鍵的方式觸發
格式化、存檔、測試一次搞定
3. 複製片段太慢
Vim 中,複製技巧是一個檻
用滑鼠 / 鍵盤開發也是如此啊!
選取、複製、貼上這個流程中都會耗去不少時間
加上貼上後還需要移動到指定位置
所需的鍵盤指令都需要不少
因此我再次使用 Web Storm 的 "Macro" 功能
直接複製整個區塊(只要移動至區塊的最前方,最後複製該區塊)
接下來在使用游標移動至要編輯的區塊即可
移動的過程中還可以使用滾輪調整畫面位置
過程中可大幅降低輸入錯誤指令問題
---
同事們也說到:你這個研究精神,Vim 早練起來了吧.
===
也感謝這門課,讓我重新體悟許多事情
- 效率不好是「工具不熟悉、方法不對、壞習慣不改」所造成的
- 重複的訓練可以有效加速對於工具、知識的掌握
- 觀看錄影知道自己還有哪邊可以優化,每次調整都可以提升數分鐘的效率
六角接下來也討論直播課程要導入相關的概念
我也是雙手贊成,這真的可以強化許多知識及工具掌握能力
#目標十分內
vim指令 在 哪裡好吃哪裡去:神秘的水原誠 Facebook 的最佳解答
最近摸ESXi的機會還不少 不過由於之前比較少接觸...只好稍微做一下筆記, 不然很容易就忘了 以這篇來說 系統是CentOS 7, 不過相信對於多數的Linux應該差別不大吧...@@ 新增網卡的部分就不贅述了, 可以在guest OS啟動的狀態下新增, 不用重開機 首先是進入目錄找網路卡設定檔 cd /etc/sysconfig/network-scripts/ 就可以查看舊網卡編號與新網卡編號 如果檔案太多可以跟DOS一樣打dir就可以看到, ifcfg-ens開頭的就是了 輸入ip a也可以看到 下方可以看到雖然有ens33跟ens37兩張網卡, 可是只有ifcfg-ens33這個既有的網卡有設定檔 基本上, 如果你是新網卡的話, 應該是沒有設定檔的 所以要複製網卡設定檔 以這個指令為例, en192是舊的網卡新的則是ens224, 照著打就可以了 cp /etc/sysconfig/network-scripts/ifcfg-ens192 ifcfg-ens-224 因為每張網卡uuid不同, 所以要先用uuidgen產生新卡uuid uuidgen ens224 接著進新網卡設定內編輯 修改成新的網卡名稱並修改uuid vim /etc/sysconfig/network-scripts/ifcfg-ens224 改完後重啟網路服務應該就可以正常使用了 service network restart 若是覺得命令列太麻煩 也可以使用nmtui的圖形介面操作 但我發現, 這介面很難用XDDDD 自己斟酌吧...
https://mshw.info/mshw/?p=18176
vim指令 在 91 敏捷開發之路 Facebook 的精選貼文
【念念不忘,必有迴響】
怎麼勾起大家心裡面那把快熄掉的火,怎麼讓火旺起來在四處蔓燒,怎麼讓培訓的效果不只是培訓的那兩三天,而是大家有動機、想在實務上用來解決問題並改善痛點、想趕快練習、想趕快分享好東西給其他人,這股衝動、堅持、行動,才是 #專業點火師 的價值。
#有用就有用_沒用就沒用
#雖然我覺得上課順序應該反過來
※ 參加我培訓的學員還有個特色,通常 #自費 跟 #老鳥 的比例非常高,至少都是 1/3 起跳,#這就是口碑
① 演化式設計:測試驅動開發與持續重構:https://dotblogs.com.tw/…/201907-evolutionary-development-t…
② 單元測試實戰營(針對遺留代碼):https://dotblogs.com.tw/…/unit-testing-effectively-with-leg…
③ 極速開發:https://dotblogs.com.tw/…/2019/02/18/extreme-developing-tra…
201811 重構與TDD實戰營
×
201901 單元測試實戰營
×
201905 極速開發
【 91 敏捷開發之路 三堂課心得集大成之文超長慎入】
一切是從某次和Scar Su的IDP開始,建議去看91的TDD 30天文章來學習,雖然之後TDD並沒有太實質的學習成果,卻間接認識了91這位大師以及開啟往後圍繞其周圍一切知識的大門。
半年多來上了三堂課,前後花了一個月左右的薪水、數不盡的白天與黑夜,收穫,真的很多。
▎重構與TDD實戰營
當時一股腦想學習TDD的我,上班時不經意看見此課程資訊,心跳加速、一股熱血湧上心頭,毫不猶豫的揪了 蔡孟哲 學長衝一發,學長的爽快答應,或許才是促成一切學習的開始。
「本來看到這個課程就有想上了,你揪我就覺得該衝一發。」
學習的路上有時候大概就是需要一點衝動以及一個添燃油的朋友,才能脫離猶豫往前衝吧。
回到課程,「TDD」這件事情並不只是單純測試先行,測試案例的產生乃是在明確的需求底下所產生,而追求明確的需求這件事本身是值得花時間進行的。而當需求討論出現瓶頸時,透過錯誤的舉例,來逼出需求方正確的回答,讓雙方的認知達到一致。當然這個需求不只是驗收情境,透過TDD不斷的由上而下的進行,在定義程式內物件職責時的需求方就是developer自己了。
比起TDD的紅燈→綠燈→重構的循環、一次只做一件事情的準則、測試或產品代碼都必須能說話、各種重構技巧讓程式碼乾淨且降低耦合等等的基本要求,在TDD上最重要的莫過於還是要不惜一切的榨出明確需求,不要害怕問蠢問題,更不要像在課堂時和學長pair時被91糾正「不要放棄溝通」的我們一樣,最終產出就是一堆廢code😂。
▎單元測試實戰營
上課前靠著自學研究,大概知道怎麼去寫單元測試,知道怎麼使用隔離框架,也在專案上嘗試過,但這個領域絕不可能僅有自己知道的那樣,也因此前堂課結束後不久便決定接著報名此課程。
雖然在課堂中一些基本知識相對已較熟悉,但有些知識或許要對的人講一遍,才能深入腦海中吧XD。例如替legacy code加測試的大絕之一--將耦合之處抽成protected,並在子物件下override此部分來達成隔離,95%以上案例皆可如此進行的這個方法,在「單元測試的藝術」一書中便已看過,當時卻沒有特別的感覺更不曾套用過,課後回去在工作上使用才發現這 太 猛 了,我想這概念就跟一個男生不聽媽媽的話但卻很聽女朋友的話的概念一樣吧😅。
不過這堂課最有價值的還是最後在工作實務上的各種探討及經驗分享,例如0測試的專案如何開始、code coverage之於團隊的意義、與第三方界接的各種眉眉角角、CI的最高準則性、團隊/個人如何看待單元測試等等,即便當時下課時間已經delay超多(不小心忘記91的課後面不能輕易安排行程RRR),但仍然捨不得走,每一項議題都是大家工作上的切身之痛,多聽一些就是多賺一些,也是對未來多一些幫助。
▎極速開發
在前兩堂課pair寫code時,就好幾次被91碎念我們的開發方式不太行,又慢又沒效率(之類的),開始只覺得寫得快又有什麼用,還是要等腦子能跟上才有意義,但隨著一次又一次91三刀流demo的洗禮下,漸漸覺得牙癢癢手癢癢。這次在學長的鼓吹下,也決定一起來學學這樣的開發方式。
這堂課程終於是個有類似講義的課程😂。隨著91的教學,vim來到了我的visual studio中,也獲得了91個人常用的自訂指令,滑鼠的地位逐漸母湯。但這堂課不僅於此,透過ReSharper的輔助,各式template的設定、自訂Quick Fix等等,把所有許多重複的、麻煩的事情,透過IDE的協助來簡化開發,讓developer關注在所需關注的事情即可。
Developer把每一個開發時的小動作(甚至是右手在滑鼠和鍵盤間移動)做簡化,每多擠出的一點點的時間,都可以用在需求的關注、架構設計等等其他本就要花時間的事情上,用最快的速度把腦裡出現的code投射到editor上,更有效率的提升工作效率以及價值。我想這才是這門課的精隨所在吧。
▎總結
上過91的課程都知道,能獲得的東西遠比課程名稱還多很多,沒有什麼值不值得,只有願不願意給自己打開門、試著站在巨人的肩上而已。
而不論是TDD、重構、UT、極速開發,練習、大量刻意的練習,才是精進的唯一之道。
▎影片 - Tennis Kata
以TDD方式完成tennis的計分功能。
從起初的一小時,透過不斷的練習、91的review、和學長的討論調整下,進入30分、27分、23分、20分、19分、17分到近期版本的14分,雖然仍有些失誤,但我想不完美的完美,更能驅使一個人繼續努力吧!
vim指令 在 [vim ] 學習vim的心法與攻略- 看板Editor - 批踢踢實業坊 的必吃
EDIT: 這裡有個不錯的連結可以當做初學參考
https://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/
這篇文章是給剛開始接觸vim的版友參考的
因為vim指令繁多,剛接觸時會很難接受它的邏輯
好像要將許多字母的對應全部都記起來,才會發揮vim的威力(雖然這麼說也沒錯:p)
也看到很多新人會上網列印vim cheat sheat
可是記不清楚各式指令,最後還是把vim當作記事本使用...
因此呢,想分享一些能幫助學習vim的心法,還有幫助記憶指令的撇步
如果版友有更多錦囊密技,也請掏寶分享,讓Editor版活絡起來吧!
vim or vi like editor最大的特色,就是有多種模式 (mode)
這也是vi/vim被認為難學的理由之一
關於mode的設計,vgod大在blog上面有一篇深入討論的文章:
https://blog.vgod.tw/2009/12/07/text-editing/
後來文字編輯器變得越來越複雜,快速鍵也大量增加,這時在有限的空間內
分配快速鍵的位置並且讓使用者容易學習又不容易忘記就成了一件困難的事
。現代的一般編輯器,包括很多寫程式用的IDE,大量使用各種混合Ctrl、
Shift、Alt的快速鍵,這種快速鍵設計哲學是把每一個功能對應到一組複合
鍵上。理所當然的,功能越多,快速鍵就越多越難記。
...
vi的這種設計避免了快速鍵的組合爆炸(想想看如果把各種組合都對應到一
個ctrl-alt快速鍵會有多少個..),並且讓使用者能完全使用鍵盤來精確、
快速的編輯一個文件,一旦熟悉這種操作後,手都不用離開鍵盤,不管是寫
程式或是寫文章都有了一種人機合一的流暢感,心中想到哪裡游標就能精確
移動到哪裡,不管多複雜的文字操作都能快速解決,心中的爽快感其實是難
以用筆墨形容的。
vim本身有11種模式,限於篇幅就先鎖定在normal and insert mode吧
一般進到vim時,會是在normal mode底下
大部分的複製、剪貼、滾動、移動游標、跳躍到書籤、錄製巨集
等"動作"都是在這個mode下完成的
要進入文字編輯模式,得按i
切回normal mode可以用esc或是^-[(ctrl-[的意思)
在normal mode底下,我暫時先將最常用的指令分成三類
action: insert, yank, delete, paste... (慣例中我們將複製稱作yank而非copy)
number: repeat action/motion
motion: cursor motion
其中最有特色的就是repeat number的部份
幾乎所有的指令都可以用number來重複(除了insert mode中的指令)
從數字著手我覺得會更容易感受到vim 的"文法"
比如說:
5b 向左移動5個單字 (移動單位和移動指令是合併的)
5^f 滾動5頁
6yy 複製6段 (變成複合句了)
d% 剪下這個括號內的所有內容
以上的動作都只需要花兩三個字元就可以做到
由於vi/vim有相當多的指令可以做各種動作
像是在單字間移動、段落、單字內、括號批配、頁首/尾、檔首/尾、行首/尾
等等
熟悉的動作指令越多,越能做出滑鼠無法做到的快速移動
同時可以跟action指令結合(action, motion在中文都通稱動作,真難翻...)
讓編修文字變得更有效率!
了解vim的文法,就可以來記憶一下幾個常用的motion
k w (a word) b (back a word) e (end of a word)
h l ^ (head of indent line) 0 (head of line)
j $ (end of line)
hjkl是上下左右,如果要追求高速的文字輸入效率
使用home row的效果會比使用上下左右高 (不知道home row是什麼請自己去查)
因此現在你可以操作看看vim指令了!
5k 向上五行
5w 向右五個字(游標在字首)
5e 向右五個字(游標在字尾)
$ 直接跳到行尾,重複次數無意義XD
剩下的請自己排列組合XD
然後來看幾個最常用的action指令:
d{motion} delete 刪除(所有的刪除都是剪下,會進入剪貼簿)
y{motion} yank 複製
c{motion} change 刪除並進入insert mode(可翻作刪修)
p paste 貼上
注:{motion}可以是複合的動作指令,如5w
注:paste因為和其他幾個指令性質有點不太相同,所以用不同的標色
我認為最核心的指令就是d,y,c,其他類似他們的指令都只是變形而已
現在可以將d,y,c跟其他的指令做組合:
d5w 刪五個字(到字首)
c^ 刪修到行首
不過如果每個動作都要跟其他動作指令做結合,就太慢了
所以就出現了幾種變形:
D 刪到行尾
C 刪修到行尾
dd 刪除整行
cc 刪修整行
yy 複製整行
Y 這也是複製整行...其實我比較希望是複製到行尾 ~"~
(順便問下版友,action到行首有沒有d^外更方便的按法啊?)
在這些motion前面可以加number,如:
5yy 複製五行
5cc 刪除五行再進入insert mode
另外有時候會需要以字元為單位的編輯,所以還有幾個小變形:
s substitude 刪修一個字元
x x 刪除一個字元
r replace 刪修一個字元再回到normal mode
R replace mode 取代模式
跟行單位的指令類似,在前面也可以加number:
5s 刪掉五個字元再進入insert mode
5x 刪五個字元
5r 將五個字元都換成新輸入的一個字元
R 每個輸入字元都會取代現在游標所在位置的字元
2R 取代的字會重複一次
看到這邊會不會有點頭昏眼花了呢XD
整理一下所有的指令:
k w (a word) b (back a word) e (end of a word)
h l ^ (head of indent line) 0 (head of line)
j $ (end of line)
刪除 複製 刪修 取代
d y c r
D Y C R (mode)
dd yy cc 貼上
x s p
切換mode
i (normal to insert)
R (normal to replace)
esc or ^-[ (back to normal)
其實沒有很多吧XD
這篇文章篇幅看起來很長,是為了要讓新進讀者能理解vim的文法
之後應該不會用這麼囉唆的語句來舉例了吧@ @|||
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.185.152
... <看更多>