Development Environment နှင့် Tools များ
Development environment (ဆော့ဖ်ဝဲလ် ရေးသားသည့် ပတ်ဝန်းကျင်) ဆိုသည်မှာ ဆော့ဖ်ဝဲလ် ရေးသားထုတ်လုပ်ရန်အတွက် အသုံးပြုသည့် tools များ အစုအဝေး ဖြစ်သည်။ Development environment တစ်ခု၏ အဓိက ဗဟိုချက်မှာ စာသား ပြင်ဆင်တည်းဖြတ်သည့် (text editing) လုပ်ဆောင်ချက် ဖြစ်ပြီး၊ ၎င်းနှင့်အတူ syntax highlighting၊ type checking၊ code formatting နှင့် autocomplete ကဲ့သို့သော တွဲဖက် လုပ်ဆောင်ချက်များ ပါဝင်သည်။ VS Code ကဲ့သို့သော Integrated development environments (IDEs) များသည် ဤလုပ်ဆောင်ချက် အားလုံးကို ဆော့ဖ်ဝဲလ် အက်ပလီကေးရှင်း တစ်ခုတည်းအတွင်း စုစည်း ပေးထားသည်။ Terminal အခြေပြု ဆော့ဖ်ဝဲလ် ရေးသားမှု လုပ်ငန်းစဉ်များ (Terminal-based development workflows) တွင်မူ tmux (terminal multiplexer တစ်ခု)၊ Vim (text editor တစ်ခု)၊ Zsh (shell တစ်ခု) နှင့် Ruff (Python linter နှင့် code formatter တစ်ခု)၊ Mypy (Python type checker တစ်ခု) တို့ကဲ့သို့သော သက်ဆိုင်ရာ ပရိုဂရမ်းမင်း ဘာသာစကားအလိုက် သီးသန့် အသုံးပြုသည့် command-line tools များကို ပေါင်းစပ် အသုံးပြုကြသည်။
IDEs နှင့် terminal အခြေပြု လုပ်ငန်းစဉ်များတွင် ၎င်းတို့၏ အားသာချက်၊ အားနည်းချက်များ အသီးသီး ရှိကြသည်။ ဥပမာအားဖြင့် Graphical IDEs များသည် လေ့လာရ ပိုမို လွယ်ကူနိုင်ပြီး ယနေ့ခေတ် IDEs များတွင် AI autocomplete ကဲ့သို့သော AI ပေါင်းစပ် လုပ်ဆောင်ချက်များ အသင့် ပါဝင်လေ့ ရှိသည်။ အခြားတစ်ဖက်တွင်လည်း Terminal အခြေပြု လုပ်ငန်းစဉ်များသည် ပေါ့ပါးပြီး GUI မရှိသော သို့မဟုတ် ဆော့ဖ်ဝဲလ် အသစ် တပ်ဆင်ခွင့် မရှိသော ပတ်ဝန်းကျင်များတွင် အသုံးပြုနိုင်သည့် တစ်ခုတည်းသော နည်းလမ်း ဖြစ်နိုင်သည်။ သင့်အနေဖြင့် နည်းလမ်း နှစ်ခုလုံးနှင့် အခြေခံကျွမ်းကျင်မှု ရှိထားပြီး အနည်းဆုံး နည်းလမ်း တစ်ခုကို ကျွမ်းကျင်စွာ အသုံးပြုနိုင်ရန် အကြံပြုလိုပါသည်။ သင့်တွင် အသုံးပြုနေကျ IDE မရှိသေးပါက VS Code ဖြင့် စတင်ရန် အကြံပြုပါသည်။
ဒီသင်ခန်းစာမှာ ကျွန်တော်တို့ အောက်ပါ အကြောင်းအရာများကို ဆွေးနွေးသွားပါမည်-
- စာသား တည်းဖြတ်ခြင်း နှင့် Vim
- Code intelligence နှင့် language servers
- AI စွမ်းအားသုံး ဆော့ဖ်ဝဲလ် ရေးသားခြင်း
- Extensions များ နှင့် အခြား IDE လုပ်ဆောင်ချက်များ
စာသား တည်းဖြတ်ခြင်း နှင့် Vim
ပရိုဂရမ် ရေးသားသည့်အခါ သင်၏ အချိန်အများစုကို စာကြောင်းအရှည်ကြီးများ ဆက်တိုက် ရေးသားခြင်း သို့မဟုတ် ဖိုင်တစ်ခုလုံးကို အထက်မှ အောက်သို့ အဆုံးထိ ဖတ်ရှုခြင်းတို့ထက် ကုဒ်များအတွင်း သွားလာလှုပ်ရှားခြင်း၊ ကုဒ် အစိတ်အပိုင်းများကို ဖတ်ရှုခြင်းနှင့် ကုဒ်များကို ပြင်ဆင်တည်းဖြတ်ခြင်းတို့တွင် ပိုမို ကုန်လွန်စေသည်။ Vim သည် ဤကဲ့သို့သော အလုပ်များကို ထိရောက်စွာ လုပ်ဆောင်နိုင်ရန် အထူး ပြုပြင်ဖန်တီးထားသည့် text editor တစ်ခု ဖြစ်သည်။
Vim ၏ အခြေခံ သဘောတရား။ Vim ၏ အခြေခံတွင် လှပသော အတွေးအခေါ် တစ်ခု ရှိသည် - ၎င်း၏ interface ကိုယ်တိုင်က စာသားများကို သွားလာကြည့်ရှုရန်နှင့် ပြင်ဆင်တည်းဖြတ်ရန် ဒီဇိုင်းထုတ်ထားသည့် ပရိုဂရမ်းမင်း ဘာသာစကား တစ်ခု ဖြစ်သည်။ ခလုတ်နှိပ်ချက်များ (မှတ်မိလွယ်သော အမည်များပါဝင်သည့်) သည် command များ ဖြစ်ကြပြီး ဤ command များကို ပေါင်းစပ် အသုံးပြုနိုင်ပါသည်။ Vim သည် မောက်စ် (mouse) အသုံးပြုခြင်းကို ရှောင်ကြဉ်သည်၊ အကြောင်းမှာ မောက်စ်ကို သုံးခြင်းသည် နှေးကွေးလွန်းသောကြောင့် ဖြစ်သည်။ Vim သည် အကွာအဝေး အဝေးကြီး လှုပ်ရှားရမှုများသည့်အတွက် arrow keys များကိုပင် ရှောင်ကြဉ်သည်။ ရလဒ်အနေဖြင့် - ဦးနှောက်နှင့် ကွန်ပျူတာ တိုက်ရိုက် ချိတ်ဆက်ထားသကဲ့သို့ ခံစားရပြီး သင်၏ တွေးခေါ်မှု မြန်နှုန်းနှင့် အမှီ လိုက်နိုင်သည့် editor တစ်ခု ဖြစ်လာစေသည်။
အခြား ဆော့ဖ်ဝဲလ်များတွင် Vim ကို ထောက်ပံ့ပေးထားမှု။ Vim ၏ အဓိက အနှစ်သာရ အယူအဆများမှ အကျိုးကျေးဇူး ရရှိရန်အတွက် Vim ဆော့ဖ်ဝဲလ် သီးသန့်ကိုပဲ အသုံးပြုရန် မလိုပါ။ စာသား တည်းဖြတ်မှု ပါဝင်သည့် ပရိုဂရမ် အများအပြားသည် “Vim mode” ကို သီးသန့် plugin အဖြစ် သို့မဟုတ် အသင့်ပါဝင်သော လုပ်ဆောင်ချက်အဖြစ် ထောက်ပံ့ပေးထားကြသည်။ ဥပမာအားဖြင့် VS Code တွင် VSCodeVim plugin ရှိပြီး၊ Zsh တွင် Vim emulation အတွက် အသင့်ပါဝင်သည့် ထောက်ပံ့မှု ပါရှိသည်၊ ထို့ပြင် Claude Code တွင်ပင် Vim editor mode အတွက် အသင့်ပါဝင်သည့် ထောက်ပံ့မှု ပါဝင်ပါသည်။ သင် အသုံးပြုသည့် စာသား တည်းဖြတ်မှု ပါဝင်သော မည်သည့် tool မဆို Vim mode ကို နည်းလမ်း တစ်ခုခုဖြင့် ထောက်ပံ့ပေးထားနိုင်ခြေ အလွန် များပါသည်။
Modal editing
Vim သည် modal editor တစ်ခု ဖြစ်သည် - လုပ်ဆောင်ရမည့် လုပ်ငန်း အမျိုးအစားများအပေါ် မူတည်၍ ကွဲပြားသော လုပ်ဆောင်မှု mode များ ပါရှိသည်။
- Normal: ဖိုင်အတွင်း သွားလာလှုပ်ရှားရန်နှင့် ပြင်ဆင်တည်းဖြတ်မှုများ ပြုလုပ်ရန်
- Insert: စာသားများ ရိုက်ထည့်ရန်
- Replace: စာသားများကို အစားထိုးရန်
- Visual (plain၊ line သို့မဟုတ် block): စာသား အစိတ်အပိုင်းများကို ရွေးချယ် (select) ရန်
- Command-line: command တစ်ခုကို Run ရန်
ခလုတ်နှိပ်ချက်များ (Keystrokes) သည် သက်ဆိုင်ရာ လုပ်ဆောင်မှု mode အပေါ် မူတည်၍ အဓိပ္ပာယ် ကွဲပြားသွားသည်။ ဥပမာအားဖြင့် Insert mode တွင် x စာလုံးကို နှိပ်ပါက “x” စာလုံးကိုသာ ရိုက်ထည့်ပေးမည် ဖြစ်သော်လည်း Normal mode တွင် နှိပ်ပါက cursor ရောက်နေသော စာလုံးကို ဖျက်ပစ်မည် ဖြစ်ပြီး Visual mode တွင်မူ ရွေးချယ်ထားသော စာသား (selection) ကို ဖျက်ပစ်မည် ဖြစ်သည်။
Vim ၏ မူလ ပုံသေ သတ်မှတ်ချက်တွင် လက်ရှိ ရောက်ရှိနေသည့် mode ကို အောက်ခြေ ဘယ်ဘက်ထောင့်တွင် ဖော်ပြပေးထားသည်။ စတင်အသုံးပြုချိန် မူလ mode မှာ Normal mode ဖြစ်သည်။ ပုံမှန်အားဖြင့် သင်၏ အချိန်အများစုကို Normal mode နှင့် Insert mode တို့အကြား ကူးပြောင်း အသုံးပြုရမည် ဖြစ်သည်။
မည်သည့် mode မှမဆို Normal mode သို့ ပြန်လည် ကူးပြောင်းရန် <ESC> (escape key) ကို နှိပ်ခြင်းဖြင့် mode ကို ပြောင်းလဲနိုင်သည်။ Normal mode မှနေ၍ Insert mode သို့ ဝင်ရောက်ရန် i၊ Replace mode သို့ ဝင်ရောက်ရန် R၊ Visual mode သို့ ဝင်ရောက်ရန် v၊ Visual Line mode သို့ ဝင်ရောက်ရန် V၊ Visual Block mode သို့ ဝင်ရောက်ရန် <C-v> (Ctrl-V၊ အချို့နေရာများတွင် ^V ဟုလည်း ရေးသားကြသည်) နှင့် Command-line mode သို့ ဝင်ရောက်ရန် : ကို အသုံးပြုနိုင်သည်။
Vim အသုံးပြုချိန်တွင် <ESC> key ကို အကြိမ်အများပြား နှိပ်ရမည် ဖြစ်သဖြင့် Caps Lock key ကို Escape အဖြစ် ရေတွက်ရန် remapping လုပ်ခြင်း (macOS အတွက် လမ်းညွှန်) သို့မဟုတ် ရိုးရှင်းသော key အစီအစဉ် တစ်ခုဖြင့် <ESC> အတွက် အစားထိုး mapping ရေးဆွဲခြင်း တို့ကို ပြုလုပ်ထားရန် စဉ်းစားပါ။
အခြေခံများ- စာသား ရိုက်ထည့်ခြင်း
Normal mode မှနေ၍ Insert mode သို့ ဝင်ရောက်ရန် i ကို နှိပ်ပါ။ ၎င်းနောက်တွင် <ESC> ကို နှိပ်၍ Normal mode သို့ မပြန်မချင်း Vim သည် အခြားသော text editor များကဲ့သို့ လုပ်ဆောင်နေမည် ဖြစ်သည်။ ထိုလုပ်ဆောင်ချက်နှင့် အထက်တွင် ရှင်းပြခဲ့သော အခြေခံများသည် Vim ဖြင့် ဖိုင်များကို စတင် ပြင်ဆင်တည်းဖြတ်ရန် လိုအပ်သမျှ ဖြစ်ပါသည် (သို့သော် သင်၏ အချိန်အားလုံးကို Insert mode ထဲ၌သာ ကုန်လွန်နေပါက ပိုမို ထိရောက်မှု ရှိမည်တော့ မဟုတ်ပါ)။
Vim ၏ interface သည် ပရိုဂရမ်းမင်း ဘာသာစကား တစ်ခု ဖြစ်သည်
Vim ၏ interface သည် ပရိုဂရမ်းမင်း ဘာသာစကား တစ်ခု ဖြစ်သည်။ ခလုတ်နှိပ်ချက်များ (မှတ်မိလွယ်သော အမည်များပါရှိသော) သည် command များ ဖြစ်ကြပြီး ဤ command များကို တွဲဖက် ပေါင်းစပ် နိုင်ပါသည်။ ၎င်းသည် မြန်ဆန် ထိရောက်သော ရွှေ့လျားမှုများနှင့် ပြင်ဆင်မှုများကို ပြုလုပ်နိုင်စေသည်၊ အထူးသဖြင့် keyboard ၏ ခလုတ် တည်နေရာများကို မှတ်မိသွားချိန်တွင် စာရိုက်ခြင်းက အလွန် မြန်ဆန် လာသကဲ့သို့ ထို command များသည် muscle memory ဖြစ်လာသည့်အခါ အလွန် ထိရောက် လာမည် ဖြစ်သည်။
ရွှေ့လျားခြင်း (Movement)
သင်၏ အချိန်အများစုကို Normal mode တွင် ကုန်လွန်စေပြီး ဖိုင်အတွင်း သွားလာ ရွှေ့လျားရန်အတွက် movement command များကို အသုံးပြုသင့်သည်။ Vim တွင် ရွှေ့လျားမှုများကို “နာမ်များ” (nouns) ဟုလည်း ခေါ်ဆိုကြသည်၊ အကြောင်းမှာ ၎င်းတို့သည် စာသား အစိတ်အပိုင်းများကို ညွှန်းဆိုသောကြောင့် ဖြစ်သည်။
- အခြေခံ ရွှေ့လျားမှု:
hjkl(ဘယ်၊ အောက်၊ အထက်၊ ညာ) - စကားလုံးများ:
w(နောက်စကားလုံး)၊b(စကားလုံး၏ အစ)၊e(စကားလုံး၏ အဆုံး) - စာကြောင်းများ:
0(စာကြောင်း၏ အစ)၊^(ပထမဆုံး စာလုံးပါသော နေရာ)၊$(စာကြောင်း၏ အဆုံး) - မျက်နှာပြင်:
H(မျက်နှာပြင် အထက်ပိုင်း)၊M(မျက်နှာပြင် အလယ်ပိုင်း)၊L(မျက်နှာပြင် အောက်ပိုင်း) - စခရင် ရွှေ့ခြင်း (Scroll):
Ctrl-u(အထက်သို့)၊Ctrl-d(အောက်သို့) - ဖိုင်:
gg(ဖိုင်၏ အစ)၊G(ဖိုင်၏ အဆုံး) - စာကြောင်း နံပါတ်များ:
:{number}<CR>သို့မဟုတ်{number}G(စာကြောင်း နံပါတ် {number})<CR>သည် carriage return / enter key ကို ညွှန်းဆိုသည်
- အထွေထွေ:
%(ကွင်းစ/ကွင်းပိတ် သို့မဟုတ် တွန့်ကွင်း ကဲ့သို့သော ကိုက်ညီသည့် ပစ္စည်း) - ရှာဖွေမှု (Find):
f{character}၊t{character}၊F{character}၊T{character}- လက်ရှိ စာကြောင်းပေါ်တွင် {character} ကို ရှေ့သို့/နောက်သို့ ရှာရန် သို့မဟုတ် ထိုနေရာအထိ ရွှေ့ရန်
- ကိုက်ညီသော နေရာများအကြား သွားလာရန်
,/;ကို သုံးသည်
- ရှာဖွေမှု (Search):
/{regex}၊ ကိုက်ညီသော နေရာများအကြား သွားလာရန်n/Nကို သုံးသည်
ရွေးချယ်ခြင်း (Selection)
Visual mode များ-
- Visual:
v - Visual Line:
V - Visual Block:
Ctrl-v
စာသားများကို ရွေးချယ် (selection) ပြုလုပ်ရန် movement key များကို အသုံးပြုနိုင်သည်။
ပြင်ဆင်တည်းဖြတ်ခြင်း (Edits)
ယခင်က မောက်စ်ဖြင့် ပြုလုပ်ခဲ့သမျှ အရာအားလုံးကို ယခုအခါ movement command များ နှင့် ပေါင်းစပ်ထားသည့် editing command များ သုံး၍ keyboard ဖြင့် ပြုလုပ်နိုင်သည်။ ဤနေရာတွင် Vim ၏ interface သည် ပရိုဂရမ်းမင်း ဘာသာစကား တစ်ခုနှင့် စတင် တူညီလာသည်။ Vim ၏ editing command များကို “tool အပြုအမူများ” (verbs) ဟုလည်း ခေါ်ဆိုကြသည်၊ အကြောင်းမှာ tool အပြုအမူများသည် နာမ်များ (nouns) အပေါ် သက်ရောက် လုပ်ဆောင်သောကြောင့် ဖြစ်သည်။
iInsert mode သို့ ဝင်ရောက်ရန်- သို့သော် စာသားများကို ပြုပြင်ရန်/ဖျက်ရန်အတွက် backspace ထက် ပိုမို ထိရောက်သော အရာများကို အသုံးပြုလိုမည် ဖြစ်သည်
o/Oအောက်တွင် / အထက်တွင် စာကြောင်းအသစ် ရိုက်ထည့်ရန်d{motion}{motion} ကို ဖျက်ရန်- ဥပမာ
dwသည် စကားလုံးကို ဖျက်ခြင်း ဖြစ်သည်၊d$သည် စာကြောင်း အဆုံးထိ ဖျက်ခြင်း ဖြစ်သည်၊d0သည် စာကြောင်း အစထိ ဖျက်ခြင်း ဖြစ်သည်
- ဥပမာ
c{motion}{motion} ကို ပြောင်းလဲရန်- ဥပမာ
cwသည် စကားလုံးကို ပြောင်းလဲခြင်း ဖြစ်သည် d{motion}ပြီးနောက်iကို နှိပ်သကဲ့သို့ ဖြစ်သည်
- ဥပမာ
xစာလုံး တစ်လုံး ဖျက်ရန် (dlနှင့် တူညီသည်)sစာလုံး တစ်လုံး အစားထိုးရန် (clနှင့် တူညီသည်)- Visual mode + ပြုပြင်ဖန်တီးမှု
- စာသားကို ရွေးချယ်ပြီး ဖျက်ရန်
dကို သို့မဟုတ် ပြောင်းလဲရန်cကို နှိပ်ပါ
- စာသားကို ရွေးချယ်ပြီး ဖျက်ရန်
- Undo ပြုလုပ်ရန်
u၊ Redo ပြုလုပ်ရန်<C-r> - ကူးယူရန် / “yank” လုပ်ရန်
y(dကဲ့သို့သော အခြား command အချို့သည်လည်း ကူးယူပေးသည်) - ကူးထည့် (paste) ရန်
p - လေ့လာရန် အခြား အရာများစွာ ရှိသေးသည်: ဥပမာအားဖြင့်
~သည် စာလုံး၏ စာလုံးကြီး/စာလုံးသေး (case) ကို ပြောင်းလဲပေးပြီးJသည် စာကြောင်းများကို ပေါင်းစပ်ပေးသည်
အရေအတွက်များ (Counts)
နာမ်များ (nouns) နှင့် tool အပြုအမူများ (verbs) ကို အရေအတွက် (count) တစ်ခုနှင့် ပေါင်းစပ် သုံးနိုင်ပြီး၊ ၎င်းသည် သတ်မှတ်ထားသော လုပ်ဆောင်ချက်ကို အရေအတွက် အကြိမ်အရေအတွက်အတိုင်း လုပ်ဆောင်ပေးမည် ဖြစ်သည်။
3wရှေ့သို့ စကားလုံး ၃ လုံး ရွှေ့ရန်5jအောက်သို့ စာကြောင်း ၅ ကြောင်း ရွှေ့ရန်7dwစကားလုံး ၇ လုံး ဖျက်ရန်
ပြုပြင်မွမ်းမံမှုများ (Modifiers)
နာမ်တစ်ခု၏ အဓိပ္ပာယ်ကို ပြောင်းလဲရန် modifiers များကို အသုံးပြုနိုင်သည်။ modifiers အချို့မှာ “အတွင်းပိုင်း” သို့မဟုတ် “အထဲ၌” ဟု အဓိပ္ပာယ်ရသော i နှင့် “အပြင်ဘက် အပါအဝင်” သို့မဟုတ် “ပတ်လည်” ဟု အဓိပ္ပာယ်ရသော a တို့ ဖြစ်ကြသည်။
ci(လက်ရှိ ကွင်းစ/ကွင်းပိတ် အတွင်းရှိ ပါဝင်အကြောင်းအရာများကို ပြောင်းလဲရန်ci[လက်ရှိ လေးထောင့်ကွင်း အတွင်းရှိ ပါဝင်အကြောင်းအရာများကို ပြောင်းလဲရန်da'Single-quoted string တစ်ခုကို ဘေးပတ်လည် single-quote များ အပါအဝင် ဖျက်ပစ်ရန်
အားလုံးကို ပေါင်းစပ် အသုံးပြုခြင်း
ဤနေရာတွင် မှားယွင်းနေသော fizz buzz ရေးသားချက် တစ်ခု ရှိသည်-
def fizz_buzz(limit):
for i in range(limit):
if i % 3 == 0:
print("fizz", end="")
if i % 5 == 0:
print("fizz", end="")
if i % 3 and i % 5:
print(i, end="")
print()
def main():
fizz_buzz(20)
Normal mode မှ စတင်၍ ပြဿနာများကို ပြင်ဆင်ရန် အောက်ပါ command အစီအစဉ်အတိုင်း အသုံးပြုကြပါမည်-
- Main ကို မည်သည့်အခါမျှ ခေါ်ဆိုထားခြင်း မရှိပါ
- ဖိုင်၏ အဆုံးသို့ သွားရန်
Gကို နှိပ်ပါ - အောက်တွင် စာကြောင်းအသစ် ဖွင့် ရန်
oကို နှိပ်ပါ if __name__ == "__main__": main()ဟု ရိုက်ထည့်ပါ- သင့် editor တွင် Python ဘာသာစကား ထောက်ပံ့မှု ပါရှိပါက Insert mode တွင် အလိုအလျောက် indentation ပြုလုပ်ပေးပေလိမ့်မည်
- Normal mode သို့ ပြန်သွားရန်
<ESC>ကို နှိပ်ပါ
- ဖိုင်၏ အဆုံးသို့ သွားရန်
- 1 အစား 0 မှ စတင်နေပါသည်
- “range” ကို ရှာဖွေရန်
/ပြီးနောက်rangeနှင့်<CR>ကို ရိုက်ထည့်ပါ - ရှေ့သို့ စကားလုံး ၂ လုံး ရွှေ့ရန်
wwကို နှိပ်ပါ (2wကိုလည်း အသုံးပြုနိုင်သော်လည်း လက်တွေ့တွင် အရေအတွက် အနည်းငယ်အတွက် count လုပ်ဆောင်ချက်ကို သုံးမည့်အစား key ကို ထပ်ခါထပ်ခါ နှိပ်လေ့ ရှိကြသည်) - insert mode သို့ ပြောင်းရန်
iကို နှိပ်ပြီး1,ကို ပေါင်းထည့်ပါ- Normal mode သို့ ပြန်သွားရန်
<ESC>ကို နှိပ်ပါ - နောက်စကားလုံး၏ အဆုံး သို့ သွားရန်
eကို နှိပ်ပါ - စာသား စတင် နောက်ဆက်တွဲ ပေါင်းထည့် ရန်
aကို နှိပ်ပြီး+ 1ကို ပေါင်းထည့်ပါ - Normal mode သို့ ပြန်သွားရန်
<ESC>ကို နှိပ်ပါ
- Normal mode သို့ ပြန်သွားရန်
- “range” ကို ရှာဖွေရန်
- 5 ၏ ဆောက်တွဲများအတွက် “fizz” ကို ရိုက်နှိပ်နေပါသည်
- စာကြောင်း ၆ သို့ သွားရန်
:6<CR>ကို နှိပ်ပါ - ‘“’ ၏ အတွင်းပိုင်းကို ပြောင်းလဲ ရန်
ci"ကို နှိပ်ပြီး"buzz"သို့ ပြောင်းလဲပါ - Normal mode သို့ ပြန်သွားရန်
<ESC>ကို နှိပ်ပါ
- စာကြောင်း ၆ သို့ သွားရန်
Vim ကို လေ့လာခြင်း
Vim ကို လေ့လာရန် အကောင်းဆုံး နည်းလမ်းမှာ အခြေခံများ (ယခုအချိန်အထိ ကျွန်တော်တို့ ဆွေးနွေးခဲ့ပြီးသော အကြောင်းအရာများ) ကို လေ့လာပြီးနောက် သင်အသုံးပြုသည့် ဆော့ဖ်ဝဲလ် အားလုံးတွင် Vim mode ကို ဖွင့်ပြီး လက်တွေ့ စတင် အသုံးပြုခြင်း ဖြစ်သည်။ မောက်စ် သို့မဟုတ် arrow key များကို အသုံးပြုလိုသည့် သွေးဆောင်မှုကို ရှောင်ကြဉ်ပါ၊ အချို့သော editor များတွင် အလေ့အကျင့်ကောင်းများ စွဲမြဲစေရန် arrow key များကို unbind ပြုလုပ်ထားနိုင်သည်။
ထပ်ဆောင်း အရင်းအမြစ်များ
- ယခင် တန်းခွဲမှ Vim သင်ခန်းစာ — ထိုနေရာတွင် Vim အကြောင်းကို ပိုမို အသေးစိတ် ဆွေးနွေးထားပါသည်
vimtutorသည် Vim နှင့်အတူ တပါတည်း ပါဝင်လာသည့် လမ်းညွှန် သင်ခန်းစာ ဖြစ်သည် — Vim တပ်ဆင်ထားပါက သင့် shell မှနေ၍vimtutorကို Run နိုင်ရပါမည်- Vim Adventures သည် Vim ကို လေ့လာနိုင်သော ဂိမ်းတစ်ခု ဖြစ်သည်
- Vim Tips Wiki
- Vim Advent Calendar တွင် Vim ဆိုင်ရာ အကြံပြုချက် အမျိုးမျိုး ပါဝင်သည်
- VimGolf သည် code golf ပုံစံ ဖြစ်သော်လည်း ပရိုဂရမ်းမင်း ဘာသာစကား နေရာတွင် Vim ၏ UI ကို အသုံးပြုထားခြင်း ဖြစ်သည်
- Vi/Vim Stack Exchange
- Vim Screencasts
- Practical Vim (စာအုပ်)
Code intelligence နှင့် language servers
IDEs များသည် ပုံမှန်အားဖြင့် Language Server Protocol ကို အကောင်အထည်ဖော်ထားသည့် language servers များနှင့် ချိတ်ဆက်ထားသော IDE extensions များမှတစ်ဆင့် ကုဒ်၏ သဘောတရားဆိုင်ရာ နားလည်မှုကို လိုအပ်သည့် သက်ဆိုင်ရာ ပရိုဂရမ်းမင်း ဘာသာစကားအလိုက် ထောက်ပံ့မှုများကို ပေးအပ်ကြသည်။ ဥပမာအားဖြင့် VS Code အတွက် Python extension သည် Pylance ပေါ်တွင် အမှီပြုထားပြီး၊ VS Code အတွက် Go extension သည် သီးသန့်ထုတ်လုပ်ထားသော gopls ပေါ်တွင် အမှီပြုထားသည်။ သင် အသုံးပြုသည့် ဘာသာစကားများအတွက် extension နှင့် language server များကို တပ်ဆင်ခြင်းဖြင့် သင့် IDE တွင် ဘာသာစကားဆိုင်ရာ လုပ်ဆောင်ချက် အများအပြားကို အသုံးပြုနိုင်မည် ဖြစ်သည်၊ ဥပမာ-
- Code completion။
object.ဟု ရိုက်ပြီးသည့်နောက် object ၏ fields နှင့် methods များကို မြင်တွေ့နိုင်ခြင်းကဲ့သို့သော ပိုမိုကောင်းမွန်သည့် autocomplete နှင့် autosuggest များ။ - Inline documentation။ စာသားပေါ် mouse တင်ထားချိန် (hover) သို့မဟုတ် autosuggest ချိန်တွင် Documentation ကို မြင်တွေ့ရခြင်း။
- Jump-to-definition။ အသုံးပြုထားသည့် နေရာမှ သတ်မှတ်ထားသည့် နေရာသို့ တိုက်ရိုက် သွားရောက်နိုင်ခြင်း၊ ဥပမာ field ညွှန်းဆိုချက်
object.fieldမှ ၎င်း field ၏ definition သို့ သွားရောက်နိုင်ခြင်း။ - Find references။ အထက်ပါ အချက်၏ ပြောင်းပြန် ဖြစ်ပြီး၊ field သို့မဟုတ် type ကဲ့သို့သော သီးခြား item တစ်ခုကို ညွှန်းဆိုထားသည့် နေရာ အားလုံးကို ရှာဖွေပေးခြင်း။
- Help with imports။ Imports များကို စနစ်တကျ စီစဉ်ခြင်း၊ မလိုအပ်သော imports များကို ဖယ်ရှားခြင်း၊ လိုအပ်နေသော imports များကို အလံပြ အသိပေးခြင်း။
- Code quality။ ဤ tools များကို သီးသန့် အသုံးပြုနိုင်သော်လည်း ဤလုပ်ဆောင်ချက်ကို language servers များကလည်း ပေးအပ်လေ့ ရှိသည်။ Code formatting သည် ကုဒ်များကို အလိုအလျောက် Indent နှင့် Format လုပ်ပေးပြီး၊ type checkers နှင့် linters များသည် စာရိုက်နေစဉ် ကုဒ်အတွင်းရှိ အမှားများကို ရှာဖွေပေးသည်။ ကျွန်တော်တို့သည် ဤလုပ်ဆောင်ချက် အကွာအဝေးကို code quality ဆိုင်ရာ သင်ခန်းစာ တွင် ပိုမို အသေးစိတ် ဆွေးနွေးသွားပါမည်။
Language servers များကို ပြင်ဆင် သတ်မှတ်ခြင်း
အချို့သော ဘာသာစကားများအတွက် extension နှင့် language server တို့ကို တပ်ဆင်လိုက်ရုံဖြင့် အားလုံး အဆင်သင့် ဖြစ်သွားမည် ဖြစ်သည်။ အခြားသော ဘာသာစကားများအတွက်မူ language server ထံမှ အပြည့်အဝ အကျိုးကျေးဇူး ရရှိရန် သင့် IDE ထံသို့ သင့် ပတ်ဝန်းကျင် (environment) အကြောင်း ပြောပြပေးရန် လိုအပ်သည်။ ဥပမာအားဖြင့် VS Code ကို သင့် Python environment ထို့သို့ ညွှန်ပြပေးခြင်းဖြင့် language server ကို သင် တပ်ဆင်ထားသော packages များကို မြင်တွေ့နိုင်စေမည် ဖြစ်သည်။ Environments အကြောင်းကို ကျွန်တော်တို့၏ code များကို ထုပ်ပိုးခြင်း နှင့် ဖြန့်ဝေခြင်း ဆိုင်ရာ သင်ခန်းစာ တွင် ပိုမို အသေးစိတ် ဆွေးနွေးထားပါသည်။
ဘာသာစကားအပေါ် မူတည်၍ သင့် language server အတွက် ပြင်ဆင် သတ်မှတ်နိုင်သည့် settings အချို့ ရှိနိုင်သည်။ ဥပမာအားဖြင့် VS Code တွင် Python ထောက်ပံ့မှုကို အသုံးပြု၍ Python ၏ optional type annotations များကို အသုံးမပြုသော project များအတွက် static type checking ကို ပိတ်ထားနိုင်သည်။
AI စွမ်းအားသုံး ဆော့ဖ်ဝဲလ် ရေးသားခြင်း
၂၀၂၁ အလယ်ပိုင်းတွင် OpenAI ၏ Codex model ကို အသုံးပြုထားသည့် GitHub Copilot စတင် မိတ်ဆက်ချိန်မှစ၍ LLMs များကို ဆော့ဖ်ဝဲလ် အင်ဂျင်နီယာ လောကတွင် ကျယ်ကျယ်ပြန့်ပြန့် အသုံးပြုလာကြသည်။ လက်ရှိတွင် အဓိက အသုံးပြုနေသည့် ပုံစံ ၃ မျိုး ရှိသည် - autocomplete၊ inline chat နှင့် coding agents တို့ ဖြစ်ကြသည်။
Autocomplete
AI စွမ်းအားသုံး autocomplete သည် သင့် IDE ရှိ ရိုးရာ autocomplete နှင့် ပုံစံတူပင် ဖြစ်ပြီး သင် စာရိုက်နေစဉ် cursor ရောက်ရှိနေသည့် နေရာတွင် ဖြည့်စွက်ချက်များကို အကြံပြုပေးသည်။ အချို့ အချိန်များတွင် ၎င်းကို “အလိုလို အဆင်ပြေနေသည့်” သာမန် လုပ်ဆောင်ချက် တစ်ခုအဖြစ် အသုံးပြုကြသည်။ ထို့ပြင် AI autocomplete ကို ပုံမှန်အားဖြင့် ကုဒ်မှတ်ချက်များ (code comments) အသုံးပြု၍ prompt ပေးကြသည်။
ဥပမာအားဖြင့် ဤသင်ခန်းစာ မှတ်စုများ၏ ပါဝင်အကြောင်းအရာများကို Download ရယူပြီး လင့်ခ်များ အားလုံးကို ထုတ်ယူပေးမည့် script တစ်ခု ရေးသားကြပါစို့။ ကျွန်တော်တို့အနေဖြင့် အောက်ပါအတိုင်း စတင် ရေးသားနိုင်သည်-
import requests
def download_contents(url: str) -> str:
Model သည် function ၏ အဓိက အစိတ်အပိုင်းကို အလိုအလျောက် ဖြည့်စွက်ပေးမည် ဖြစ်သည်-
response = requests.get(url)
return response.text
ကျွန်တော်တို့သည် မှတ်ချက်များကို အသုံးပြု၍ ဖြည့်စွက်ချက်များကို ထပ်မံ လမ်းညွှန်ပေးနိုင်သည်။ ဥပမာအားဖြင့် Markdown လင့်ခ်များ အားလုံးကို ထုတ်ယူရန် function တစ်ခု စတင်ရေးသားသော်လည်း ၎င်းတွင် လုံလောက်သော အမည်ဖော်ပြချက် မရှိသေးပါက-
def extract(contents: str) -> list[str]:
Model သည် အောက်ပါအတိုင်း ဖြည့်စွက်ပေးပေလိမ့်မည်-
lines = contents.splitlines()
return [line for line in lines if line.strip()]
ကျွန်တော်တို့သည် ကုဒ် မှတ်ချက်များမှတစ်ဆင့် ဖြည့်စွက်မှုကို လမ်းညွှန်ပေးနိုင်သည်-
def extract(content: str) -> list[str]:
# extract all Markdown links from the content
ဤတစ်ကြိမ်တွင် Model သည် ပိုမိုကောင်းမွန်သော ဖြည့်စွက်မှုကို ပေးအပ်သည်-
import re
pattern = r'\[.*?\]\((.*?)\)'
return re.findall(pattern, content)
ဤနေရာတွင် ဤ AI coding tool ၏ အားနည်းချက် တစ်ခုကို မြင်တွေ့နိုင်သည်- ၎င်းသည် cursor နေရာတွင်သာ ဖြည့်စွက်ချက်များကို ပေးနိုင်ခြင်း ဖြစ်သည်။ ဤဖြစ်ရပ်တွင် import re ကို function အတွင်း၌ ထည့်သွင်းမည့်အစား module အဆင့်တွင် ထားရှိခြင်းက ပိုမိုကောင်းမွန်သော အလေ့အကျင့် ဖြစ်ပေလိမ့်မည်။
အထက်ပါ ဥပမာသည် ကုဒ်မှတ်ချက်များ သုံး၍ code completion ကို မည်သို့ လမ်းညွှန်နိုင်သည်ကို ပြသရန်အတွက် နာမည် သေချာ မပေးထားသော function ကို အသုံးပြုထားခြင်း ဖြစ်သည်၊ လက်တွေ့တွင် သင်အနေဖြင့် extract_links ကဲ့သို့သော ပိုမို ရှင်းလင်းစွာ အမည်ပေးထားသည့် function များဖြင့် ရေးသားလိုမည် ဖြစ်ပြီး docstring များကိုလည်း ရေးသားလိုမည် ဖြစ်သည် (ထိုအပေါ် မူတည်၍ model သည် အထက်ပါအတိုင်း တူညီသော ဖြည့်စွက်ချက်ကို ထုတ်ပေးရမည် ဖြစ်သည်)။
စမ်းသပ်ပြသရန် အလို့ငှာ ကျွန်တော်တို့ script ကို အပြီးသတ် ရေးသားနိုင်သည်-
print(extract(download_contents("https://raw.githubusercontent.com/missing-semester/missing-semester/refs/heads/master/_2026/development-environment.md")))
Inline chat
Inline chat သည် စာကြောင်း သို့မဟုတ် အစိတ်အပိုင်းတစ်ခုကို ရွေးချယ်ပြီး ပြင်ဆင်မှု ပြုလုပ်ရန် AI model ထံသို့ တိုက်ရိုက် prompt ပေးနိုင်စေသည်။ ဤ တုံ့ပြန်မှု mode တွင် model သည် ရှိပြီးသား ကုဒ်များကို ပြင်ဆင်ပေးနိုင်သည် (cursor ၏ နောက်ပိုင်းမှ ကုဒ်များကိုသာ ဖြည့်စွက်ပေးသည့် autocomplete နှင့် ကွဲပြားသည်)။
အထက်ပါ ဥပမာကို ဆက်လက် လေ့လာရလျှင် ပြင်ပမှ requests library ကို မသုံးရန် ဆုံးဖြတ်လိုက်သည် ဆိုပါစို့။ သက်ဆိုင်ရာ စာကြောင်း ၃ ကြောင်းကို ရွေးချယ်၍ inline chat ကို ခေါ်ယူပြီး အောက်ပါအတိုင်း ပြောဆိုနိုင်သည်-
use built-in libraries instead
Model မှ အောက်ပါအတိုင်း အဆိုပြု ပေးပါမည်-
from urllib.request import urlopen
def download_contents(url: str) -> str:
with urlopen(url) as response:
return response.read().decode('utf-8')
Coding agents
Coding agents အကြောင်းကို Agentic Coding သင်ခန်းစာ တွင် ပိုမို အသေးစိတ် ဆွေးနွေးထားပါသည်။
အကြံပြုထားသော ဆော့ဖ်ဝဲလ်များ
လူကြိုက်များသော AI IDEs အချို့မှာ GitHub Copilot extension ပါဝင်သည့် VS Code နှင့် Cursor တို့ ဖြစ်ကြသည်။ GitHub Copilot ကို လက်ရှိတွင် ကျောင်းသားများ၊ ဆရာ/မများနှင့် လူကြိုက်များသော open source project များမှ ပြုပြင်ထိန်းသိမ်းသူများအတွက် အခမဲ့ ရရှိနိုင်ပါသည်။ ဤနယ်ပယ်သည် အလွန် လျင်မြန်စွာ တိုးတက်ပြောင်းလဲနေသော နယ်ပယ် ဖြစ်သည်။ ထိပ်တန်း ထုတ်ကုန် အများအပြားတွင် အကြမ်းအားဖြင့် တူညီသော လုပ်ဆောင်ချက်များ ပါရှိကြသည်။
Extensions များ နှင့် အခြား IDE လုပ်ဆောင်ချက်များ
IDEs များသည် စွမ်းဆောင်ရည်မြင့်မားသော tools များ ဖြစ်ကြပြီး extensions များ ကြောင့် ပိုမို စွမ်းဆောင်ရည် မြင့်မားလာကြသည်။ ကျွန်တော်တို့အနေဖြင့် သင်ခန်းစာ တစ်ခုတည်းတွင် ဤလုပ်ဆောင်ချက် အားလုံးကို မဖော်ပြနိုင်သော်လည်း လူကြိုက်များသော extension အချို့အတွက် ညွှန်ပြချက် အချို့ကို ဤနေရာတွင် ပေးအပ်ထားပါသည်။ ဤနယ်ပယ်ကို ကိုယ်တိုင် စူးစမ်း လေ့လာရန် တိုက်တွန်းပါသည်၊ အွန်လိုင်းတွင် Vim plugins များအတွက် Vim Awesome နှင့် လူကြိုက်အများဆုံး စီစဉ်ထားသော VS Code extensions များ ကဲ့သို့သော လူကြိုက်များသည့် IDE extensions စာရင်းများစွာ ရှိပါသည်။
- Development containers: လူကြိုက်များသော IDEs များမှ ထောက်ပံ့ပေးထားပြီး (ဥပမာ VS Code မှ ထောက်ပံ့ပေးထားမှု)၊ dev containers သည် သင့်အား development tools များကို Run ရန် container တစ်ခုကို အသုံးပြုနိုင်စေသည်။ ၎င်းသည် ရွှေ့ပြောင်းရလွယ်ကူမှု (portability) သို့မဟုတ် သီးခြားခွဲထုတ်ထားမှု (isolation) အတွက် အသုံးဝင်နိုင်သည်။ code များကို ထုပ်ပိုးခြင်း နှင့် ဖြန့်ဝေခြင်း ဆိုင်ရာ သင်ခန်းစာ တွင် containers အကြောင်းကို ပိုမို အသေးစိတ် ဖော်ပြထားပါသည်။
- Remote development: SSH ကို အသုံးပြု၍ အဝေးထိန်း စက် (remote machine) ပေါ်တွင် ဆော့ဖ်ဝဲလ် ရေးသားခြင်း (ဥပမာ VS Code အတွက် Remote SSH plugin ဖြင့်)။ ဥပမာအားဖြင့် Cloud ပေါ်ရှိ စွမ်းဆောင်ရည်မြင့် GPU စက်ပေါ်တွင် ကုဒ်များ ရေးသားပြီး Run လိုသည့်အခါ ဤအရာသည် အသုံးဝင်နိုင်သည်။
- Collaborative editing: Google Docs ပုံစံအတိုင်း ဖိုင်တစ်ခုတည်းကို အတူတကွ တည်းဖြတ်ခြင်း (ဥပမာ VS Code အတွက် Live Share plugin ဖြင့်)။
လေ့ကျင့်ခန်းများ
- သင့် editor နှင့် သင့် shell ကဲ့သို့သော Vim mode ထောက်ပံ့သည့် သင်အသုံးပြုနေသော ဆော့ဖ်ဝဲလ် အားလုံးတွင် Vim mode ကို ဖွင့်ပြီး ရှေ့လာမည့် လအတွင်း သင့် စာသား တည်းဖြတ်မှု အားလုံးအတွက် Vim mode ကို အသုံးပြုပါ။ တစ်စုံတစ်ခု လုပ်ဆောင်ရာတွင် မထိရောက်ဟု ခံစားရပါက သို့မဟုတ် “ပိုမိုကောင်းမွန်သော နည်းလမ်း ရှိရမည်” ဟု တွေးမိပါက Google တွင် ရှာဖွေကြည့်ပါ၊ ပိုမိုကောင်းမွန်သော နည်းလမ်း ရှိနေနိုင်ပါသည်။
- VimGolf မှ စိန်ခေါ်မှု တစ်ခုကို အပြီးသတ်ပါ။
- သင် လုပ်ဆောင်နေသော project တစ်ခုအတွက် IDE extension နှင့် language server ကို ပြင်ဆင် သတ်မှတ်ပါ။ Library dependencies များအတွက် jump-to-definition ကဲ့သို့သော မျှော်လင့်ထားသည့် လုပ်ဆောင်ချက် အားလုံး မှန်ကန်စွာ အလုပ်လုပ်ကြောင်း သေချာပါစေ။ ဤလေ့ကျင့်ခန်းအတွက် သုံးနိုင်သော ကုဒ်မရှိပါက GitHub မှ open-source project တစ်ခုခုကို အသုံးပြုနိုင်ပါသည် (ဤ project ကဲ့သို့သော)။
- IDE extensions စာရင်းကို လေ့လာပြီး သင့်အတွက် အသုံးဝင်မည့် extension တစ်ခုကို တပ်ဆင်ပါ။
Licensed under CC BY-NC-SA.