VIM နှင့် ကျွန်တော်

vim Sep 21, 2020

Tech လောကထဲမှာ VIM ကို မသိတဲ့သူ အတော်ရှားမှာပါ။ VIM နဲ့ ပတ်သတ်ပြီး ဘယ်လိုထွက်မလဲဆိုတဲ့ joke တွေက တောင်ပုံရာပုံပေါ့။ :q! ဆိုပြီး ဘာကြီးမှန်း မသိတဲ့ command တွေ ရိုက်ပြီးသုံးရတာက အဆင်မပြေလိုက်တာဆိုပြီး ညည်းဖူးခဲ့တယ်။ အဓိက VPS တွေကို သုံးရင် VIM ကို မသုံးချင်လို့ကို Nano default ထားပြီး သုံးခဲ့ဖူးတယ်။ VIM ကို meme ကြီး တစ်ခုလို့ပဲ သတ်မှတ်ခဲ့တာ တော်တော်ကြာကြာပဲ။ အူကြောင်ကြား လက်ကွက်တွေနဲ့ ဘာတွေမှန်းမသိတဲ့ text editor ဟာ veteran programmer တွေရဲ့ လက်စွဲတော်ဆိုပဲ။ အဲ့ဒါကို နားမလည်ခဲ့ဘူး။

နောက်တော့ ကျွန်တော့် စီတီအိုက VIM Binding တွေကို VS Code မှာ သုံးပြီးရေးတာ မြင်ရတော့ စိတ်ဝင်စားမိတယ်။ ဘာကောင်းလို့လည်းဟပေါ့။ စောင်တလွဲ လက်ကွက်တွေ မှတ်နေရတာနဲ့တင် အချိန်ကုန်သေး။ သူကတော့ ပြောပါတယ် VIM ကို သုံးတတ်ချင်ရင် ၂ပတ်လောက် အချိန်ပေးကြည့်တဲ့။ သူမတူတဲ့ perspective ကနေ စဥ်းစားတတ်လာမယ်ပေါ့။ အိုခေဆိုပြီး VIM Binding for VSCode extension သွင်းချလိုက်တယ်။ ဘာလုပ်တယ်မှတ်လည်း INSERT mode မှာပဲ သုံးတယ်။ ကိုယ် အလုပ်လုပ်နေကျ workflow တွေ နှောင့်နှေးသွားသလို ခံစားရတာနဲ့ ပြန်ဖြုတ်လိုက်တယ်။ ဥပမာ — ကျွန်တော်က File Explorer ကို Ctrl + T သုံးပြီး file name အစလေး ရိုက်ပြီး ခုန်ကူးတယ်။ VIM binding သွင်းလိုက်တော့ ကိုယ့် shortcut တချို့က ပျောက်သွားတော့ တော်တော်တိုင်ပတ်သွားတယ်။ အဲ့ဒါနဲ့ လုံးလည်ချာလည်လိုက်ရင်း weekend တစ်ခုရောက်တော့ VIM ကို သေချာအချိန်ပေးပြီး လေ့လာကြည့်မယ်ဆိုတဲ့ စိတ်ဖြစ်လာတယ်။ အဲ့အချိန် ကိုယ်တွေက Mac ကနေ Linux ပြန်သုံးမယ်ဆိုပြီး ပြန်ကူးခါစ။ Config ဖိုင်တွေကို Sublime Text editor ကနေပဲ ပြင်နေတာ 🤣 … ပြီးတော့ ကိုယ့် VPS မှာ nano သုံးရတာလည်း တစ်ခါတစ်လေ hinder ဖြစ်နေတယ် ခံစားရတာနဲ့ VIM Tutor (http://www2.geog.ucl.ac.uk/~plewis/teaching/unix/vimtutor) ကို လိုက်လုပ်ကြည့်ပြီး VIM ကို 100% commitment ပေးလိုက်တယ်။ အနည်းအကျဥ်းတော့ နားလည်သွားတယ်ပေါ့။

VIM learning curve

အဲ့ဒါနဲ့ 100% စသုံးဖို့ ကြိုးစားတော့ တိုင်ပတ်ချက်ပဲ။ NORMAL mode နဲ့ INSERT mode ကို ပြောင်းရတာကြီးကကို အလုပ်မဟုတ်သလို ခံစားရတယ်။ တစ်ပတ်ကြာတော့ နေသားကျလာတယ်။ အမယ် သိပ်အဆိုးကြီး မဟုတ်ပါဘူးပေါ့။ နှစ်ပတ်ကြာတော့ မြန်လာတယ်။ တစ်လကျော်ကြာပြီးတဲ့နောက်မှာ muscle memory က အသက်ဝင်သွားတော့ VIM မှ VIM ပဲ ကျန်တဲ့ text editor တွေထဲမှာ စာပြင်ရတာ စိတ်ညစ်စရာကြီးလိုဖြစ်လာကော။ ဘာကြောင့် အဲ့လိုပြောရလည်းဆိုရင်

Programming လုပ်တယ်ဆိုတာ 80% thinking, 20% typing ပါ။ ကျွန်တော်တို့ code ရေးတယ်ဆိုတာ typing လုပ်တာကနည်းပါတယ်။ Code ထဲမှာ navigation သွားပြီး edit လုပ်တာက ပိုပြီးများပါတယ်။ မယုံရင် ကိုယ် code ရေးတဲ့အခါ သတိထားကြည့်ပါ။ VIM ရဲ့ အလုပ်လုပ်ပုံက INSERT mode (i) ကို ပြောင်းတာ ခဏပဲ ပြောင်း … ဖောင်းဒိုင်းဖောင်းဒိုင်း စာရိုက်သွင်းပြီးတာနဲ့ ESC နှိပ်ပြီး NORMAL mode ပြောင်း ကိုယ့် code ကို edit ချက်ချင်းလုပ်ဆိုတာမျိုးပါ။ VIM မှာပါတဲ့ shortcut တွေက traditional shortcut အချို့ထက် ပိုမြန်ပါတယ်။ သူ့ command shortcut တွေကို သုံးချင်ရင် NORMAL mode ကို ချက်ချင်းပြန်ပြောင်းပြီး သုံးရပါတယ်။ ကျွန်တော့်အတွက် အဓိက အသုံးဝင်တာတွေက

  • $ — cursor ရှိတဲ့ စာကြောင်းနောက်ဆုံးကို သွားပါ
  • A — cursor ရှိတဲ့ စာကြောင်းနောက်ဆုံးကို သွားပြီး INSERT mode ထဲ တန်းဝင်ပါ။
  • a — cursor ထောက်တဲ့အနောက် တစ်နေရာကို INSERT mode ဝင်ပါ။
  • I and i — အပေါ်က A, a command နှစ်ခုလိုပဲ ဒါပေမယ့် cursor ရှေ့မှာ INSERT mode ဝင်ပါတယ်။
  • dd — (delete line) ဒီကောင်ကို black hole register လုပ်ထားပြီး စာသားတစ်ခုကို အမြန်ဖျက်တဲ့နေရမှာ သုံးပါတယ်။
  • yy —(yank line)စာတစ်ကြောင်းလုံးကို copy လုပ်ပါ။
  • p — paste ချပါ။
  • V — (VISUAL mode) တနည်းအားဖြင့်ပြောရင်တော့ mouse နဲ့ drag ဆွဲပြီး selection လုပ်တာပါပဲ but with keyboard.
  • O — cursor အပေါ်မှာ လိုင်းတစ်ခု လုပ်ပါ။
  • o — cursor အောက်မှာ လိုင်းတစ်ခုလုပ်ပါ။
  • w — word တစ်ခု cursor ခုန်ပါ။
  • b — word တစ်ခု အနောက်ကို cursor ခုန်ပါ။

VIM ကို သုံးမယ်ဆိုရင် language တစ်ခုလို စဥ်းစားပါ။ အစပိုင်းဆိုရင် စဥ်းစားရခက်ပါလိမ့်မယ်။ အလေ့အကျင့်ရသွားရင် အရမ်းကောင်းပါတယ်။ ဥပမာ -

  1. d3w — ဆိုရင် delete 3 words ပါ; ကိုယ့် cursor ထောက်ရာကနေပြီး စာလုံး ၃လုံးဖျက်ပါပေါ့။
  2. V3jd — ဆိုရင် cursor ကနေပြီး အောက်က လိုင်း ၃ကြောင်းကို select လုပ်ပြီး delete လုပ်ပါ။
  3. yy3p — ဆိုရင် cursor ထောက်ထားတဲ့ လိုင်းတစ်ကြောင်းလုံးကို copy လုပ်ပြီး လိုင်း ၃လိုင်းပွားပါ ( yank 3 paste )။
  4. V3j2> — ဆိုရင် cursor ထောက်ထားတဲ့ လိုင်းကနေပြီး အောက် ၃ကြောင်းကို select လုပ်ပြီး ညာဘက်ကို tab 2 ချက်ခုန်ပေးပါဆိုတဲ့ သဘောပါ။

ဒါ ဥပမာ သေးသေးလေးတွေပါ ဒီ့ထက် ပိုပြီး complex ဖြစ်တဲ့ command တွေ သုံးပြီး သုံးလို့ရပါသေးတယ်။

အဲ့ဒီတော့ Mouse ကို သွားဖို့ interaction time နည်းသွားပါတယ်။ Mouse ကို အသုံးပြုမှု တော်တော်ကြီး ကျသွားတာ သတိထားမိပါလိမ့်မယ်။ ကိုယ့်လက်က home row key ကို မခွာတဲ့အတွက် code ရေးရတာ focus မိပြီး FLOW ထဲက မထွက်သွားတာ သတိထားမိပါလိမ့်မယ်။ Code editing လုပ်တာလည်း အတော်လေးကို မြန်လာပြီး အဓိက shortcut တွေ ပူးပေါင်း နှိပ်စရာမလိုတော့ပါဘူး (for eg: Mac မှာဆို CMD + Arrow သုံးပြီး word ခုန်လို့ရပါတယ်။ VIM မှာဆို W အကြီးနဲ့ ခုန်ပြီးလို့ရပါတယ်) Line Number relative သုံးခဲ့ရင် cursor ရှိတဲ့ နေရာက လိုင်းအပေါ်ဆို 5k (သို့) အောက်ဆိုရင် 5j ဆိုပြီး တန်းခုန်ဆင်းလို့ရတဲ့ အကွက်တွေ အများကြီး ရှိပါတယ်။

VIM သုံးရတာ အတော်ပျော်ဖို့ကောင်းပါတယ်။ ဒါ ရိုးရိုး VSCode အတွင်းက VIM Binding သုံးနေတာပါ။ UNIX က native VIM ဆိုရင်တော့ customization လေးတွေ လုပ်ဖို့လိုပါတယ် (eg. Nerdtree etc) … နောက် ကောင်းကျိုးတစ်ခုက VPS ထဲမှာ server configuration တွေ ပြင်ရတော့မယ်ဆိုရင် ကိုယ်က VIM နဲ့ အသားကျသွားတဲ့အတွက် အရမ်းမြန်ပြီး ထိရောက်သွားပါတယ်။

လောလောဆယ် ပျင်းနေတဲ့အတွက် ဒီစာကို ကောက်ရေးလိုက်တာပါ။ နောက်ထပ် စိတ်ကူးပေါက်ရင် ပေါက်သလိုမျိုး VIM အကြောင်း ရေးပါဦးမယ်။

Thanks for reading!

https://xkcd.com/1823/

Original Article: https://medium.com/@kaungmyatlwin/vim-နှင့်-ကျွန်တော်-a2babc96760a

Kaung Myat Lwin

Full Stack Developer (Node.js) working @ Expa.AI.