Mastering Vim: بافرها ، ویندوز و ویرایش متن شما زرادخانه

مقدمه
در این آموزش اصول اولیه کار با بافرها و پنجره ها (به نام صفحه) را در VIM با استفاده از یک رویکرد نمونه محور پوشش خواهیم داد. برای به دست آوردن بیشترین استفاده از آن ، من اکیداً توصیه می کنم که VIM را باز نگه دارید و هر مرحله را دنبال کنید. هیچ قدم را پرش نکنید. فقط صبور باشید و هر مرحله را یک بار انجام دهید. انجام این کار به طور فعال مفاهیم را تقویت می کند و یادگیری را آسان تر می کند.
بافرها: فضاهای کاری متنی شما
بافر منطقه ای در حافظه است که متن را ذخیره می کند. هر بار که یک پرونده را باز می کنید ، محتوای آن در یک بافر خوانده می شود و به شما امکان می دهد بدون تأثیرگذاری بر پرونده اصلی ، در آن بافر تغییراتی ایجاد کنید.
مشاهده بافر
بیایید با باز کردن VIM شروع کنیم. به طور پیش فرض شما یک بافر نامشخص خواهید داشت. شما می توانید تمام بافرهای خود را با استفاده از :ls
یا :buffers
بشر
استفاده کردن :ls
بشر
:ls
1 %a "[No Name]" line 1
لیست بافر تولید شده توسط :ls
از قالب زیر استفاده می کند:
Number Indicator Name Line
1 %a "[No Name]" line 1
همه این زمینه ها به جز نشانگر خود توضیحی هستند. در اینجا گزیده ای از کمک VIM برای :ls
:
u an unlisted buffer (only displayed when [!] is used)
|unlisted-buffer|
% the buffer in the current window
# the alternate buffer for ":e #" and CTRL-^
a an active buffer: it is loaded and visible
h a hidden buffer: It is loaded, but currently not
displayed in a window |hidden-buffer|
- a buffer with 'modifiable' off
= a readonly buffer
R a terminal buffer with a running job
F a terminal buffer with a finished job
? a terminal buffer without a job: `:terminal NONE`
+ a modified buffer
x a buffer with read errors
شاخص در بالا :ls
خروجی است %a
، که مشخص می کند که بافر فعال است (a
) و در پنجره یا صفحه فعلی (%
). +
مفید است این به شما می گوید که آیا بافر اصلاح شده است یا خیر. ما یک مورد مفید دیگر را پوشش خواهیم داد ، #
، بعداً
:ls
تابع یاور
در طول این مقاله ما دستورات خط فرمان را صادر خواهیم کرد :ls
فرمان مانند :bd | ls
بشر به عنوان یک راحتی توصیه می کنم عملکرد زیر را به خود اضافه کنید .vimrc
:
" You must specify 'normal' for all normal-mode commands to work.
function! ExeCmdLs(cmd)
if a:cmd =~ '^normal'
exe a:cmd
ls
elseif empty(a:cmd)
ls
else
exe a:cmd .. ' | ls'
endif
endfunction
nnoremap <space>c :call ExeCmdLs('')<left><left>
کد فوق شامل یک نقشه برداری مفید حالت عادی است ،
، که شما را در حالت خط فرمان ، انواع قرار می دهد :call ExeCmdLs('_')
، و مکان نما خود را در _
بشر
برای بقیه مقاله هر کجا که می بینید :[command] | ls
، این ترجمه به استفاده از
کلان
ذخیره بافر در پرونده ها
قبل از اینکه بتوانیم یک بافر جدید ایجاد کنیم ، باید بافر فعال را در یک فایل ذخیره کنیم ، می توانید این کار را با استفاده از آن انجام دهید :w
بشر متن را اضافه کنید File a.txt
به بافر ، و سپس استفاده کنید :w a.txt | ls
بشر
"a.txt" [New] 1L, 11B written
1 %a "a.txt" line 1
اکنون نامی دارد a.txt
، تعدادی از 1 ، و یک شاخص از %a
، گفتن این بافر فعال در پنجره فعلی است.
علاوه بر این :w
، می توانید با استفاده از بافرهای باز با استفاده از :wa
، که مخفف “نوشتن همه” است.
ایجاد بافرها
:enew
یک بافر جدید و نامشخص ایجاد می کند. استفاده کردن :enew | ls
:
:call ExeCmdLs('enew')
1 # "a.txt" line 1
3 %a "[No Name]" line 1
ما بافر نامگذاری کرده ایم a.txt
(1) و بافر نامشخص (3) ؛ بافر 3 بافر فعال است. متن را وارد کنید File b.txt
، سپس استفاده کنید :w b.txt | ls
بشر
"b.txt" [New] 1L, 11B written
1 "a.txt" line 1
3 %a "b.txt" line 1
اکنون ما دو پرونده برای کار با آنها داریم.
حذف بافرها
:bd
بافر فعال را حذف می کند. بافر را حذف کنید b.txt
(3) استفاده :bd | ls
بشر
"a.txt" 1L, 11B
1 %a "a.txt" line 1
حالا ما به بافر بازگشتیم a.txt
بشر
باز کردن پرونده ها در بافر
:e
پرونده ای را در بافر فعال باز می کند. باز b.txt
با استفاده از :e b.txt | ls
بشر
"b.txt" 1L, 11B
1 # "a.txt" line 1
3 %a "b.txt" line 1
در
#
نشانگر
توجه کنید که بافر
a.txt
(1) یک شاخص از#
بشر این است
آخرین بافر ویرایش شده. می توانید استفاده کنید:e #
برای جابجایی بین جریان
و آخرین بافرهای ویرایش شده. استفاده کردن:e # | ls
چند بار و توجه کنید که چگونه
شاخص ها تغییر می کنند.
پیمایش بین بافرها
دستورات زیر به شما امکان می دهد بین بافر حرکت کنید:
-
:[N]bnext [N]
یا:[N]bn [N]
: به بافر بعدی بروید ، جایی که n شماره بافر است. -
:[N]bprev [N]
یا:[N]bp [N]
: به بافر قبلی بروید ، جایی که n شماره بافر است. -
:[N]buffer [N]
یا:[N]b [N]
: حرکت به بافر مشخص شده N ، جایی که n شماره بافر است. -
:bf[irst]
: اولین بافر را در لیست بافر حرکت دهید. -
:bl[ast]
: به آخرین بافر در لیست بافر حرکت کنید. -
:buffer [N]
یا:b [N]
: حرکت به بافر[N]
بشر
از قبلی :ls
فرمان ، ما بافر داریم a .txt
(1) و b.txt
(3) باز ، با b.txt
(3) بافر فعال بودن. استفاده کردن :bp | ls
برای حرکت به بافر a.txt
(1).
"a.txt" 1L, 10B
1 %a "a.txt" line 1
3 # "b.txt" line 1
در %a
نشانگر به شما می گوید که بافر a.txt
(1) بافر فعال است. اکنون استفاده کنید :bp | ls
بشر
"b.txt" 1L, 11B
1 # "a.txt" line 1
3 %a "b.txt" line 1
بافنده b.txt
(3) اکنون فعال است.
با استفاده از بافر خاص می توانید با استفاده از بافر خاص حرکت کنید :buffer
یا :b
بشر استفاده کردن :b 1 | ls
برای حرکت به بافر a.txt
(1).
"a.txt" 1L, 10B
1 %a "a.txt" line 1
3 # "b.txt" line 1
تکرار بیش از بافرها
:bufdo [command]
به شما امکان می دهد یک دستور را بیش از هر بافر انجام دهید. استفاده کردن :bufdo bd
برای حذف همه بافرها.
:ls
3 %a "[No Name]" line 1
یک استفاده از :bufdo s/File/&:/ | update
انجام جستجو و مکان در چندین بافر است. باز a.txt
وت b.txt
با استفاده از :e a.txt | e b.txt | ls
بشر
"b.txt" 1L, 11B
1 # "a.txt" line 1
2 %a "b.txt" line 1
محتویات a.txt
وت b.txt
هستند File a.txt
وت File b.txt
، به ترتیب بیایید جستجو و مکان File
با File:
بشر استفاده کردن :bufdo! s/File/&:/ | update
بشر حال ، اگر بین بافر استفاده می کنید :bn
وت :bp
، خواهید دید که هر دو پرونده تغییر یافته است.
با استفاده از :bufdo!
مانع از No write since last change
خطا
:update
یک نسخه دقیق تر از:w
در این صورت فقط در صورت ایجاد تغییرات ، پرونده را ذخیره می کند.
خروج از ویم
می توانید با استفاده از دستورات زیر از VIM خارج شوید:
-
:q
: پنجره فعلی را که می تواند صفحه یا پنجره VIM باشد ، ترک کنید. هنگام ایجاد تغییرات ، شکست می خورد. -
:wq
: پرونده فعلی و پنجره را ببندید. اگر آخرین ویرایش را ترک کنید. نوشتن هنگامی که بافر بی نام باشد ، شکست می خورد. -
:x
: مانند:wq
، به جز نوشتن ONY هنگام ایجاد تغییرات.
بیایید به احتیاط استفاده از دستورات ترک بپردازیم. بافر فعال را ذخیره کرده و با استفاده از VIM ترک کنید :wq
بشر اکنون بازگشایی a.txt
وت b.txt
در VIM با استفاده از دستور زیر:
vim a.txt b.txt
با استفاده از :ls
نشان می دهد که هر دو پرونده باز هستند.
:ls
1 %a "a.txt" line 1
2 "b.txt" line 0
سعی کنید با استفاده از VIM ترک کنید :q
بشر خواهد گفت E173: 1 more file to edit
بشر به نظر می رسد قبل از ترک کردن ، باید هر بافر را فعال کنید. استفاده کردن :bn | q
برای حرکت به بافر بعدی b.txt
(2) و سپس ترک. حالا شما نباید این مشکل را داشته باشید.
من وقتی سعی کردم همه بافرها را ذخیره کنم و با استفاده از VIM ترک کردم ، متوجه این مشکل شدم
:wa | q
، که شکست خورد
بافر ایالات
حالت های بافر پیچیده هستند. مدتی طول کشید تا آنها را درک کنم. بیایید هر یک از شش حالت بافر را پوشش دهیم.
ثبت نشده
یک بافر موجود در لیست بافر ظاهر نمی شود. هر زمان که می خواهید یک منطقه موقت برای ویرایش متن داشته باشید می توانید از یک بافر نشده استفاده کنید. پس از اتمام کار ، می توانید بافر را حذف کرده و تغییرات را کنار بگذارید. کد زیر یک بافر ثبت نشده ایجاد می کند:
" Create listed buffer
:enew
" Make active buffer unlisted
:setlocal nobuflisted
:ls!
وت :ls u
تمام بافرها را ، لیست شده و ثبت نشده نمایش دهید. با استفاده از :ls!
خروجی زیر را تولید می کند:
:ls!
1 # "a.txt" line 1
2 "b.txt" line 1
3u%a "[No Name]" line 1
در u
بخشی از نشانگر بافر 3 به معنای ثبت نشده است.
غیر فعال
یک بافر غیرفعال در هیچ صفحه نمایش داده نمی شود. به عنوان مثال ، استفاده از :new
یک صفحه و بافر جدید ایجاد می کند و از این طریق بافر قبلاً فعال را غیرفعال می کند.
فعال
یک بافر فعال هر بافر است که در حال حاضر در هر صفحه نمایش داده می شود. بنابراین ، می توانید چندین بافر فعال در چندین صفحه باز شده باشید.
پنهان
شما می توانید چندین بافر بارگذاری شده در حافظه داشته باشید ، اما فقط می توانید یک بافر را در هر صفحه نمایش دهید. به عبارت دیگر ، هر بافر که در هیچ صفحه نمایش داده نمی شود پنهان است. با استفاده از بافر می توانید بافر پنهان کنید :hide
بشر
بار شده
یک بافر بارگذاری شده حاوی محتویات یک پرونده است. به عنوان مثال ، اگر پرونده ای را با استفاده از آن باز کنید :edit a.txt
، آن بافر بارگیری می شود.
بارگیری نشده
:bunload N
یک بافر و محتوای آن را از حافظه تخلیه می کند ، اما هنوز هم در لیست بافر ظاهر می شود.
ویندوز (صفحه): مشاهده و ویرایش به صورت موازی
در حالی که بافر متن شما را در حافظه ذخیره می کند ، ویندوز (صفحه ها) بخش هایی در پنجره VIM هستند که آن را نمایش می دهند. تقسیم پنجره VIM در چندین صفحه به شما امکان می دهد همزمان بافرهای مختلف را مشاهده و ویرایش کنید ، و گردش کار خود را بدون تغییر مداوم بین پرونده ها ساده کنید.
تقسیم و پیمایش
می توانید با استفاده از دستورات زیر ، صفحات را ایجاد کنید که هر یک از آنها پنجره VIM را به یک صفحه جدید تقسیم می کند.
-
:new
: یک صفحه جدید ایجاد کنید و ویرایش یک بافر بی نام را شروع کنید. -
:split {file}
sp
: یک صفحه جدید ایجاد کنید و پرونده ویرایش {پرونده} را در آن شروع کنید. تقریباً مانند کار می کند:split | edit {file}
کی{file}
عرضه می شود -
:vsplit
vs
: مانند کار می کند:split
اما به صورت عمودی تقسیم می شود. -
:vnew
:
:q
صفحه فعال را می بندد اما بافر را در حافظه می گذارد. اگر می خواهید هر دو صفحه و بافر آن را ببندید ، از آن استفاده کنید:bd
بشر
نشان دهنده :new
ویم را ببندید و مجدداً مجدداً استفاده کنید :new | ls
برای ایجاد یک صفحه پایین متصل. مشاهده کنید که چگونه هر دو صفحه حاوی یک بافر یکسان هستند.
:call ExeCmdLs('new')
1 #a "[No Name]" line 1
2 %a "[No Name]" line 1
هر کدام از صفحه حاوی مکان نما ، صفحه فعال است.
نشان دهنده :vsplit
استفاده کردن :vs
برای ایجاد یک صفحه از بالا وصل شده. این قسمت پایین را به صورت عمودی به دو زیر صفحه تقسیم می کند. خیلی باحال ، اینطور نیست؟
نشان دهنده :split
بیایید یک طرح متفاوت ایجاد کنیم. با استفاده از بافر با استفاده از :bd | ls
بشر
:ls
1 %a "[No Name]" line 1
استفاده کردن :vs
برای تقسیم VIM به صورت عمودی در صفحات چپ و راست متصل. بعد ، استفاده کنید :sp
برای تقسیم صفحه راست به صورت افقی به دو زیر تابه.
تنظیمات برای :new
با :sp
وت :vs
گزینه های زیر رفتار رفتار را کنترل می کنند :split
وت :vsplit
بشر
-
splitbelow
یاsb
: هنگام روشن شدن ، تقسیم یک صفحه ، صفحه جدید را در زیر جریان فعلی قرار می دهد. -
splitright
یاspr
: هنگامی که روشن است ، تقسیم یک صفحه ، صفحه جدید را درست در جریان فعلی قرار می دهد.
می توانید با آماده سازی تنظیمات ، گزینه VIM را باز کنید
no
بشر به عنوان مثال ، UNTETsplitbelow
با استفاده از:set nosplitbelow
بشر
پیمایش بین صفحات
می توانید با استفاده از صفحات حرکت کنید :wincmd {arg}
، با {arg}
یک فرمان حرکت حالت عادی مانند k
(بالا) ، j
(پایین) ، l
(درست) ، و h
(سمت چپ). از طرف دیگر ، می توانید از کلیدهای HOTTER استفاده کنید :Ctrl-w h/j/k/l
بشر
این مهم است که درک کنیم که هر دو بافر و ویندوز دارای شماره هایی هستند که آنها را شناسایی می کنند ، و شما می توانید آنها را به عنوان آرگومان برای عملکردهای مختلف VIM تهیه کنید. علاوه بر این ، درک تفاوت بین پیمایش بین صفحات در مقابل بافرها به شما کمک می کند تا هنگام باز کردن تعداد زیادی صفحه باز ، از دست رفتن خودداری کنید.
تکرار بیش از صفحات
شبیه :bufdo
با :windo
به شما امکان می دهد برای هر بافر یک دستور را فراخوانی کنید. به عنوان مثال ، استفاده کنید :windo echo winnr()
برای نمایش شماره صفحه هر صفحه.
حذف صفحات
:x
با :bd
با :q
وت :wq
بستن پنجره ها درک کنید که می توانید یک بافر یا بافر و یک صفحه را حذف کنید ، اما بدون حذف یک بافر نمی توانید یک صفحه را حذف کنید.
بسته و سپس ویم را دوباره با هم باز کنید a.txt
بشر بعد ، استفاده کنید :vs b.txt | ls
باز کردن b.txt
به یک صفحه راست متصل.
"b.txt" 1L, 11B
1 #a "a.txt" line 0
2 %a "b.txt" line 1
اکنون پنجره VIM به صورت عمودی بین صفحات چپ و راست متصل شده است. در حال حاضر هر صفحه دارای یک بافر فعال و بافر است b.txt
در پنجره فعلی (%
).
به یاد بیاورید که
%
شاخص پنجره فعال را تعریف می کند.
:close
بدون حذف بافر آن ، صفحه فعال را می بندد. استفاده کردن :close | ls
و توجه کنید که چگونه بسته شدن یک صفحه بافر را حذف نمی کند.
به عنوان مثال نهایی ، استفاده کنید :vs b.txt
باز کردن b.txt
به یک صفحه راست متصل و سپس :bd | ls
برای حذف آن
:call ExeCmdLs('bd')
1 %a "a.txt" line 1
توجه کنید که چگونه این بافر را حذف می کند b.txt
و صفحه آن باز هم ، مهم است که بین حذف صفحات و بافر تفاوت قائل شود.
به عنوان مثال با استفاده از بافرها و صفحات
بیایید با استفاده از هر آنچه که تاکنون آموخته ایم ، یک مثال جامع را طی کنیم. با افتتاح شروع کنید a.txt
با b.txt
وت c.txt
در VIM با استفاده از دستور bash vim a.txt b.txt c.txt
، و سپس استفاده کنید :ls
بشر با استفاده از دستورات زیر ، شاخص ها را رعایت کنید.
:ls
1 %a "a.txt" line 1
2 "b.txt" line 0
3 "c.txt" line 0
استفاده کردن :vnew | new | ls
برای تقسیم عمودی پنجره VIM در صفحات چپ و راست ، با تخته راست متصل به صورت افقی بین زیر تابه های پایین و بالا ، تقسیم می شود.
:vnew
:new
:ls
1 a "a.txt" line 0
2 "b.txt" line 0
3 "c.txt" line 0
4 #a "[No Name]" line 0
5 %a "[No Name]" line 1
استفاده کردن :b c.txt | ls
برای حرکت به بافر c.txt
و توجه کنید که چگونه این بافر 5 را حذف می کند.
:b c.txt
:ls
1 a "a.txt" line 0
2 "b.txt" line 0
3 %a "c.txt" line 1
4 a "[No Name]" line 0
استفاده کردن :winc k | ls
برای حرکت مکان نما به سمت بالا سمت راست.
:winc k
:ls
1 #a "a.txt" line 0
2 "b.txt" line 0
3 a "c.txt" line 1
4 %a "[No Name]" line 1
استفاده کردن b b.txt | ls
برای حرکت به بافر b.txt
بشر
:b b.txt
:ls
"b.txt" 1L, 11B
1 a "a.txt" line 0
2 %a "b.txt" line 1
3 a "c.txt" line 1
دستورات ساده
بیایید برخی از دستورات را تحکیم کنیم. با استفاده از :vs b.txt | sp c.txt | ls
به همان نتیجه قبلی می رسد.
:ls
1 a "a.txt" line 0
2 #a "b.txt" line 1 <== Alternate buffer
3 %a "c.txt" line 1 <== Active buffer
توجه کنید که بافر b.txt
(2) #
شاخص ، که نشان دهنده بافر ضامن متناوب است. استفاده کردن :e # | ls
برای جابجایی به آن.
"b.txt" 1 line --100%-- ((1) of 3)
1 a "a.txt" line 0
2 %a "b.txt" line 1 <== Active buffer
3 # "c.txt" line 1 <== Alternate buffer
اکنون بافر c.txt
(3) بافر متناوب است.
استفاده کردن :e # | ls
برای جابجایی به بافر b.txt
(2) ، و سپس استفاده کنید :bd | bd | ls
برای حذف بافر b.txt
(2) و c.txt
(3). توجه کنید که چگونه حذف هر بافر صفحات مرتبط با آنها را می بندد.
:bd
:bd
:ls
1 %a "a.txt" line 1
سفارشی سازی و بهینه سازی
فراتر از دستورات اساسی ، VIM مجموعه ای از گزینه ها را برای تنظیم محیط ویرایش شما ارائه می دهد. با تسلط بر حالتهای بافر (فعال ، غیرفعال ، پنهان و بارگیری نشده) ، درک عمیق تری از مدیریت متن VIM به دست می آورید و امکانات شخصی سازی بیشتر را باز می کنید. علاوه بر این ، به ایجاد و ذخیره چیدمان های پنجره شخصی تبدیل شده و به شما این امکان را می دهد تا یک فضای کاری را کاملاً متناسب با وظایف و ترجیحات خاص خود تهیه کنید.
جامعه پر جنب و جوش VIM همچنین تعداد زیادی از افزونه ها را ارائه می دهد که می تواند بافر و تجربه مدیریت پنجره شما را بیشتر کند. این افزونه ها را کشف کنید تا ابزارهایی را کشف کنید که ناوبری را ساده تر می کند ، سازمان را بهبود می بخشد و ویژگی های قدرتمندتری را نیز به زرادخانه خود اضافه می کند.
سفر تسلط را در آغوش بگیرید
تو درست کردی! امیدوارم این آموزش با استفاده از بافر و صفحات در VIM تغییر شکل داده شود. این به سختی سطح قابلیت های VIM را خراشیده است. من اکیداً توصیه می کنم که آزمایش کنید با استفاده از سوراخ های خرگوش پایین بروید :help
بشر
خوب ، Fiend. حالا ترک ، لطفا.