تسلط بر Vim – DevOps ضروری!

【👨🏻💻 یوتیوب】
سایر مطالب مربوط به DevOps را تماشا کنید – AWS
شروع
نمودارهای حرکتی
▼/▶ Cursor ▽/▷ Target
حرکات چپ راست
┌───────────── |
├───────────── 0 $ ──────────────┐
│ ┌────────── ^ fe ────────┐ │
│ │ ┌─────── Fo te ───────┐│ │
│ │ │┌────── To 30| ───┐ ││ │
│ │ ││ ┌──── ge w ───┐ │ ││ │
│ │ ││ │ ┌── b e ─┐ │ │ ││ │
│ │ ││ │ │ ┌h l┐ │ │ │ ││ │
▽ ▽ ▽▽ ▽ ▽ ▽▼ ▼▽ ▽ ▽ ▽ ▽▽ ▽
echo "A cheatsheet from quickref.me"
حرکات بالا به پایین
- SCREEN 1 START
┌─┬─────────▷ #!/usr/bin/python
│ │ ┌───▷
│ │ │ print("Hello")
│ │ { } ▶ print("Vim")
│ │ │ print("!")
│ │ └─▷
│ │ ┌───┬───▷ print("Welcome")
G gg H M L k j ▶ print("to")
│ │ └─▷ print("quickref.me")
│ │ print("/vim")
│ │
│ └─────▷
│ - SCREEN 1 END
└──────────────▷ print("SCREEN 2")
حرکات
میانبر | شرح |
---|---|
سخنرانی | j |
/ | نیم صفحه بالا/پایین |
/ | صفحه بالا/پایین |
کلمات
میانبر | شرح |
---|---|
b / w | کلمه قبلی/بعدی |
GE / E. | پایان قبلی/بعدی کلمه |
خط
میانبر | شرح |
---|---|
0 (صفر) / $ | شروع/پایان خط |
^ | شروع خط (غیر خالی) |
شخصیت
میانبر | شرح |
---|---|
FE / FE | به E قبلی/بعدی بروید |
به / به | قبل از/بعد از O/Next O حرکت کنید |
/ n |
مدرک
میانبر | شرح |
---|---|
gg / g | خط اول/آخرین |
: n | از |
} / { | خط خالی بعدی/قبلی |
پنجره
میانبر | شرح |
---|---|
h / m / l | صفحه بالا/میانی/پایین |
ZT / ZZ / ZB | بالا/مرکز/پایین این خط |
حالت درج
میانبر | شرح |
---|---|
i / a | قبل/بعد از مکان نما را وارد کنید |
i / a | شروع/پایان خط را وارد کنید |
o / o (نامه) | خط جدید زیر/بالا را وارد کنید |
s / s | char/line را حذف کنید و درج کنید |
ج / سی سی | تغییر به خط پایان/جریان فعلی |
گسی | در آخرین نقطه درج قرار دهید |
جنجال |
صرفه جویی و خروج
میانبر | شرح |
---|---|
: w | پس انداز کردن |
: س | پرونده بستن |
: WQ | : x |
: WQA | همه پرونده ها را ذخیره و ترک کنید |
: س! | ZQ |
: qa | همه پرونده ها را ببندید |
: qa! | مجبور به ترک همه پرونده ها |
: W Now.txt | اکنون بنویسید. |
: sav new.txt | ذخیره و ویرایش new.txt |
: w! | برای readonly پرونده بنویسید |
حالت عادی
میانبر | شرح |
---|---|
حرف | یک شخصیت را جایگزین کنید |
حرف | حالت جایگزین را وارد کنید |
U / 3U | تغییر 1 /3 بار تغییر می کند |
تو | تغییر در یک خط |
j | با خط بعدی بپیوندید |
/ 5 | تغییر مجدد 1/5 بار تغییر می کند |
برش و چسباندن
میانبر | شرح |
---|---|
x | حذف شخصیت (برش) |
P / P | چسباندن بعد از/قبل |
XP | دو شخصیت را عوض کنید |
د | حذف به پایان خط (برش) |
DW | حذف کلمه (برش) |
DD | حذف خط (برش) |
DDP | تعویض دو خط |
شما | خط یانک (کپی) |
“*ص | “+P |
“*y | “+y |
در حالت بصری
میانبر | شرح |
---|---|
د | x |
حرف | انتخاب را جایگزین کنید |
حرف | انتخاب یانک (کپی) |
تکرار کننده
میانبر | شرح |
---|---|
بشر | آخرین فرمان را تکرار کنید |
؛ | آخرین F ، T ، F یا T را تکرار کنید |
با | آخرین F ، T ، F یا T را معکوس کنید |
واد | آخرین تکرار: S |
@: | یک دستور خط فرمان را تکرار کنید |
حالت بصری
میانبر | شرح |
---|---|
حرفهای | حالت بصری را وارد کنید |
حرفهای | حالت خط بصری را وارد کنید |
حالت بلوک بصری را وارد کنید | |
GGVG | تمام متن را انتخاب کنید |
> / < | متن را به راست/چپ تغییر دهید |
ماکرو
جدید | جدید |
---|---|
سعادت | ضبط کلان من |
سعدی | ضبط ماکرو را متوقف کنید |
I | کلان من را اجرا کنید |
7@من | 7 بار کلان را اجرا کنید |
دفتر | آخرین کلان را تکرار کنید |
شما می توانید کلان را برای هر نامه ای ذخیره کنید نه فقط i
اپراتورهای VIM
استفاده
میانبر | شرح |
---|---|
د | حرف |
عملگر | حرکت |
اپراتورها را با حرکاتی برای استفاده از آنها ترکیب کنید
اپراتورهای موجود
میانبر | شرح |
---|---|
د | حذف کردن |
حرف | یانک (کپی) |
جف | تغییر (حذف سپس درج) |
پ | خمیر |
= | کد فرمت |
g ~ | پرونده را تغییر دهید |
گودال | بزرگ |
گودال | حسابهای کوچک |
> | درست توطئه |
< | توطئه سمت چپ |
! | از طریق برنامه خارجی فیلتر کنید |
نمونه
ترکیب | شرح |
---|---|
DD | خط فعلی را حذف کنید |
دی جی | دو خط را حذف کنید |
DW | حذف به کلمه بعدی |
DB | شروع به شروع کلمه |
DFA | حذف تا یک کاراکتر |
د/سلام | حذف تا سلام |
سی سی | تغییر خط فعلی ، مترادف با S |
شما | خط فعلی را کپی کنید |
> j | خط 2 خط |
GGDG | یک سند کامل را حذف کنید |
GG = G | یک سند کامل را تورفتگی کنید |
اشکال | یک سند کامل را کپی کنید |
حساب
[count]
[count]
ترکیب | شرح |
---|---|
2D | 2 خط را حذف کنید |
6 سال | 6 خط کپی کنید |
D3W | 3 کلمه را حذف کنید |
D5J | 5 خط را به سمت پایین حذف کنید |
> 4K | 4 خط به سمت بالا |
اشیاء متن VIM
استفاده
میانبر | شرح | جدید |
---|---|---|
حرفهای | i / a | پ |
عملگر | داخلی / اطراف | متنی |
با یک اپراتور داخلی یا اطراف بلوک های متنی کار کنید
اشیاء متنی
میانبر | شرح |
---|---|
پ | پاراگراف |
حرف | کلام |
حرف | Word (احاطه شده توسط فضای سفید) |
حرف | حکم |
[ ( { < | A []، () ، یا {} بلوک |
])}> | بوها []، () ، یا {} بلوک |
“” | یک رشته نقل شده |
شرح | یک بلوک [( |
B | A block in [{ |
t | A HTML tag block |
See :help text-objects
Delete
Shortcut | Description |
---|---|
diw | Delete inner word |
dis | Delete inner sentence |
di” | Delete in quotes |
da” | Delete in quotes (including quotes) |
dip | Delete a paragraph |
Selections
Shortcut | Description |
---|---|
vi” | Select inner quotes “…” |
va” | Select quotes “…” |
vi[ | Select inner brackets […] |
VA[ | Select brackets […] |
با صدای بلند | Word داخلی را انتخاب کنید |
VIP | پاراگراف داخلی را انتخاب کنید |
VIPIP | پاراگراف بیشتر را انتخاب کنید |
متفرقه
میانبر | شرح |
---|---|
صف | تغییر کلمه درونی |
CI “ | نقل قول های داخلی را تغییر دهید |
استنباط | تغییر برچسب های داخلی (HTML) |
سیپ | تغییر پاراگراف داخلی |
ید | پاراگراف داخلی یانک |
خیط | پاراگراف یانک (از جمله Newline) |
VIM چندین پرونده
بافش
جدید | جدید |
---|---|
: e پرونده | یک فایل را در یک بافر جدید ویرایش کنید |
: bn | به بافر بعدی بروید |
: bp | به بافر قبلی بروید |
: BD | حذف پرونده از لیست بافر |
: B 5 | بافر شماره 5 را باز کنید |
: B File | با فایل به یک بافر بروید |
: ls | همه بافرهای باز را لیست کنید |
: پرونده SP | پنجره باز و تقسیم |
: در مقابل پرونده | پنجره باز و به صورت عمودی تقسیم می شود |
: پنهان | این بافر را پنهان کنید |
: WN | پرونده را بنویسید و به بعدی بروید |
: Tab BA | همه بافرها را به صورت زبانه ویرایش کنید |
ویندوز
جدید | جدید |
---|---|
حرف | پنجره |
حرفهای | پنجره تقسیم به صورت عمودی |
حرف | ویندوز را تغییر دهید |
سعدی | یک پنجره را ترک کنید |
حرف | وارد یک برگه جدید شوید |
x | تعویض جریان با بعدی |
– / + | کاهش/افزایش قد |
< /> | کاهش/افزایش عرض |
= | به همان اندازه بالا و گسترده |
ساعت / ل | به پنجره سمت چپ/راست بروید |
j / k | به پنجره بالا/پایین بروید |
زبانه
میانبر | شرح |
---|---|
: موضوع [file] | پرونده را در یک برگه جدید ویرایش کنید |
: TABF [file] | اگر در برگه جدید وجود دارد باز شود |
: TABC | بستن برگه فعلی |
: نقطه | بسته های دیگر را ببندید |
: زبانه ها | لیست همه برگه ها |
: TABR | به برگه اول بروید |
: سفره | به برگه Last بروید |
: TABM 0 | حرکت به موقعیت 0 |
: tabn | به برگه بعدی بروید |
: TABP | به برگه قبلی بروید |
حالت عادی
میانبر | شرح |
---|---|
GT | به برگه بعدی بروید |
GT | به برگه قبلی بروید |
2 گرم | به برگه شماره 2 بروید |
VIM را جستجو کنید و جایگزین کنید
جستجو
جدید | جدید |
---|---|
/foo | به جلو جستجو کنید |
/foo \ c | جستجو رو به جلو (مورد غیر حساس) |
؟ foo | جستجو به عقب |
/\ v \ d+ | جستجو با regex |
حرف | الگوی جستجوی تطبیق بعدی |
حرف | مسابقه قبلی |
* | جستجوی کلمه فعلی به جلو |
# | جستجوی کلمه فعلی به عقب |
جایگزین خط
`
:[range]s/{pattern}/{str}/[flags]
`
:s/old/new | Replace first |
:s/old/new/g | Replace all |
:s/\vold/new/g | Replace all with regex |
:s/old/new/gc | replace all (Confirm) |
:s/old/new/i | Ignore case replace first |
:2,6s/old/new/g | Replace between lines 2-6 |
Replace FILE
`
:%s/{pattern}/{str}/[flags]
`
:%s/old/new | Replace first |
:%s/old/new/g | Replace all |
:%s/old/new/gc | Replace all (Confirm) |
:%s/old/new/gi | Replace all (ignore case) |
:%s/\vold/new/g | Replace all with regex |
Ranges
– | – |
---|---|
% | Entire file |
’<,’> | Current selection |
5 | Line 5 |
5,10 | Lines 5 to 10 |
$ | Last line |
2,$ | Lines 2 to Last |
. | Current line |
,3 | Next 3 lines |
-3, | Forward 3 lines |
Global command
`
:[range]g/{pattern}/[command]
`
:g/foo/d | Delete lines containing foo |
:g!/foo/d | Delete lines not containing foo |
:g/^\s*$/d | Delete all blank lines |
:g/foo/t$ | Copy lines containing foo to EOF |
:g/foo/m$ | Move lines containing foo to EOF |
:g/^/m0 | Reverse a file |
:g/^/t. | Duplicate every line |
Inverse :g
`
:[range]v/{pattern}/[command]
`
:v/foo/d | Delete lines not containing foo(also :g!/foo/d) |
Flags
– | – |
---|---|
g | Replace all occurrences |
i | Ignore case |
I | Don’t ignore case |
c | Confirm each substitution |
Substitute expression (magic)
– | – |
---|---|
& | \0 |
\1…\9 | Replace with the group 0-9 |
\u | Uppercase next letter |
\U | Uppercase following characters |
\l | Lowercase next letter |
\L | Lowercase following characters |
\e | End of \u, \U, \l and \L |
\E | End of \u, \U, \l and \L |
Examples
`
:s/a|b/xxx\0xxx/g # Modifies “a b” to “xxxaxxx xxxbxxx”
:s/test/\U& file/ # Modifies “test” to “TEST FILE”
:s/(test)/\U\1\e file/ # Modifies “test” to “TEST file”
:s/\v([abc])([efg])/\2\1/g # Modifies “af fa bg” to “fa fa gb”
:s/\v\w+/\u\0/g # Modifies “bla bla” to “Bla Bla”
:s/\v([ab])|([cd])/\1x/g # Modifies “a b c d” to “ax bx x x”
:%s/./\L&/ # Modifies “HTML” to “html”
:s/\v<(.)(\w)/\u\1\L\2/g # Make every first letter of a word uppercase
:%s/^(.)\n\1/\1/ # Remove duplicate lines
:%s/<\/=(\w+)>/\U&/g # Convert HTML-Tags to uppercase
:g/^pattern/s/$/mytext # Find and append text to the end
:g/pattern/norm! @i # Run a macro on matching lines
/^(.)(\r\?\n\1)+$ # View the duplicates lines
/\v^(.*)(\r?\n\1)+$ # View the duplicates lines (very magic)
:v/./,/./-j # Compress blank lines into a blank line
:g//,//d # Delete inclusively from to
`
Vimdiff
Usage
`
$ vimdiff file1 file2 [file3]$ vim -d file1 file2 [file3]
`
Editing
`
:[range]diffget [bufspec]:[range]diffput [bufspec]
`
Shortcut | Description |
---|---|
do / :diffget | Obtain (get) difference |
dp / :diffput | Put difference |
:dif | Re-scan differences |
:diffo | Switch off diff mode |
:1,$+1diffget | Get all differences |
ZQ | Quit without changes |
See: Ranges
Folds
Shortcut | Description |
---|---|
zo / zO | Open |
zc / zC | Close |
za / zA | Toggle |
zv | Open folds for this line |
zM | Close all |
zR | Open all |
zm | Fold more (foldlevel += 1) |
zr | Fold less (foldlevel -= 1) |
zx | Update folds |
Jumping
Shortcut | Description |
---|---|
]c | Next difference |
[c | Previous difference |
Miscellaneous
Case
Shortcut | Description |
---|---|
vU | Uppercase character |
vu | Lowercase character |
~ | Toggle case character |
viw U | Uppercase word |
viw u | Lowercase word |
viw ~ | Toggle case word |
VU / gUU | Uppercase line |
Vu / guu | Lowercase line |
V~ / g~~ | Toggle case line |
gggUG | Uppercase all text |
ggguG | Lowercase all text |
ggg~G | Toggle case all text |
Jumping
Shortcut | Description |
---|---|
Go back to previous | |
Go forward | |
gf | Go to file in cursor |
ga | Display hex, ascii value |
Misc command-lines
– | – |
---|---|
:h | Help open help view |
:edit! | Reload current file |
:2,8m0 | Move lines 2-8 to 0 |
:noh | Clear search highlights |
:sort | Sort lines |
:ter | Open a terminal window |
:set paste | Enable Insert Paste sub-mode |
:set nopaste | disable Insert Paste sub-mode |
:cq | Exiting with an error(aborting Git) |
Navigating
Shortcut | Description |
---|---|
% | Nearest/matching {[()]} |
[( | [{ |
]) | ]{ |
[m | Previous method start |
[M | Previous method end |
Counters
Shortcut | Description |
---|---|
Increase number | |
Decrease number |
Tags
Shortcut | Description |
---|---|
:tag Classname | Jump to first definition of Classname |
Jump to definition | |
g] | See all definitions |
Go back to last tag | |
Back/forward | |
:tselect Classname | Find definitions of Classname |
:tjump Classname | Find definitions of Classname (auto-select 1st) |
Formatting
– | – |
---|---|
:ce 8 | Center lines between 8 columns |
:ri 4 | Right-align lines at 4 columns |
:le | Left-align lines |
See :help formatting
نشان
میانبر | شرح |
---|---|
`^ | آخرین موقعیت مکان نما در حالت درج |
` | آخرین تغییر در بافر فعلی |
`” | آخرین بافر فعلی خارج شده |
`0 | در آخرین پرونده ویرایش شده |
'' | بازگشت به خط در بافر فعلی که از آنجا پرید |
|
Back to position in current buffer where jumped from |
`[ | To beginning of previously changed or yanked text |
`] | To end of previously changed or yanked text |
`< | To beginning of last visual selection |
`> | To end of last visual selection |
ma | Mark this cursor position as a |
`a | Jump to the cursor position a |
‘a | Jump to the beginning of the line with position a |
d’a | Delete from current line to line of mark a |
d`a | Delete from current position to position of mark a |
c’a | Change text from current line to line of a |
y`a | Yank text from current position to position of a |
:marks | List all current marks |
:delm a | Delete mark a |
:delm a-d | Delete marks a, b, c, d |
:delm abc | Delete marks a, b, c |
Calculator
Shortcut | Description |
---|---|
= 7*7 | Shows the result |
= 10/2 | Shows the result |
Do this in INSERT mode
Shell
– | – |
---|---|
:! | Interpret Shell Command |
:r! | Read in output of shell |
:r!date | Insert date |
:!!date | Replace current line with date |
Command line
Shortcut | Description |
---|---|
Insert current word into the command line | |
“ | Paste from ” register |
Auto-completion of path in insert mode |
Tricks
Remove duplicate lines
:sort | %!uniq -u
برای شماره گذاری خطوط موجود در پرونده
:%!cat -n
کل Doc را در کلیپ بورد کپی کنید
:%w !pbcopy # Mac OS X
:%w !xclip -i -sel c # GNU/Linux
:%w !xsel -i -b # GNU/Linux
همچنین ببینید