برنامه نویسی

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>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کد فوق شامل یک نقشه برداری مفید حالت عادی است ، c، که شما را در حالت خط فرمان ، انواع قرار می دهد :call ExeCmdLs('_')، و مکان نما خود را در _بشر

برای بقیه مقاله هر کجا که می بینید :[command] | ls، این ترجمه به استفاده از c[command] کلان

ذخیره بافر در پرونده ها

قبل از اینکه بتوانیم یک بافر جدید ایجاد کنیم ، باید بافر فعال را در یک فایل ذخیره کنیم ، می توانید این کار را با استفاده از آن انجام دهید :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بشر به عنوان مثال ، UNTET splitbelow با استفاده از :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. حالا ترک ، لطفا.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا