برنامه نویسی

نکات neovim برای تسریع در ناوبری متن شما

Neovim دارای میانبرها و ویژگی های بی پایان است. حتی با درک اصول اولیه ، می توان درک قدرت پنهان ویرایشگر را واقعاً دشوار کرد. در اینجا ، هدف من ارائه نکاتی است که من معتقدم تغییر دهنده بازی در هنگام حرکت به طور کارآمد متن هستند.

این برای افرادی است که از مرحله تنظیم اولیه گذشته هستند. شما باید درک مناسبی از نحوه عملکرد سیستم پیکربندی داشته باشید و در مورد برخی از میانبرهای اساسی بدانید.

استفاده را متوقف کنید hjkl

نه ، شما مجبور نیستید کاملاً استفاده را متوقف کنید hjklبشر آنها کاربردهای خود را دارند. به عنوان مثال ، اگر یک خط بالاتر یا پایین دارید ، j وت k معقول اگر یک شخصیت در سمت چپ یا راست هستید ، می توانید استفاده کنید h یا lبشر با این حال ، در هر موقعیت دیگری hjkl ناکارآمد هستند

به جای H و L باید از چه چیزی استفاده کنم؟

H و L را می توان جایگزین کرد wبا bوت eبشر این سه دستور تقریباً می توانند به طور کامل در حال حرکت به سمت چپ و راست توسط یک شخصیت جایگزین شوند. عبور از یک خط به صورت افقی به طور قابل توجهی کارآمدتر است. این مثال را بگیرید:

const foo: Bar = Bar.init();
//    ˘          ⦿
حالت تمام صفحه را وارد کنید

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

شما در f در foo، و شما می خواهید به B در Barبشر به طور معمول ، شما باید تایپ کنید l یازده بار! در عوض ، استفاده از w، می توانید در 4 به آنجا بروید.

ما می توانیم بهتر عمل کنیم. وجود دارد Wبا Bوت E، که شبیه به کلید های کوچک حروف کوچک مربوطه ، با یک تفاوت اصلی است. به جای واجد شرایط بودن کلمه به عنوان گروهی از شخصیت های مداوم که توسط نمادها یا فضای سفید قطع نمی شوند ، نسخه های سرمایه با هر شخصیتی که فضای سفید به عنوان یک کلمه نیست ، رفتار می کنند. این بدان معنی است که foo: یک کلمه در نظر گرفته شده است. اکنون ، ما می توانیم آن را فقط در سه فشار کلیدی “نوار” کنیم!

هر چیزی فراتر از این می تواند کمی غیرقابل اعتماد باشد. ما می توانست از f فرمان پس از B برای پرش به اولین اتفاق B، و سپس فشار دهید ; برای رفتن به مورد دلخواه. این بسیار مفید است ، اما واقعاً پیشرفت بزرگی نیست ، زیرا هنوز هم برای رسیدن به هدف ، سه فشار کلیدی طول می کشد.

استفاده از افزونه برای سرعت نهایی

در مثال قبلی ، جایی که هدف در همان خط قرار دارد ، استفاده از آن کاملاً منطقی است W یا fبشر با این حال ، این همیشه اینگونه نیست. این مثال را بگیرید:

const foo: Bar = Bar.init();
//    ˘
defer foo.deinit();

foo.baz();
if (foo.hasBar()) {
  foo.doSomethingAwesome(arg1, arg2, arg3);
//                                   ⦿
}
حالت تمام صفحه را وارد کنید

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

اکنون ما در f در foo و ما می خواهیم به a در arg3بشر این در دو بعد جبران می شود و تعیین بهترین راه برای رسیدن به آنجا دشوار است.

ما فقط می توانستیم مستقیماً استدلال را جستجو کنیم / پس از arg3بشر این کار می کند ، اما خیلی دقیق نیست. اگر arg3 در هر نقطه بین مکان نما و آن مکان مورد نظر استفاده می شد ، ابتدا به آنجا می پرید.

ما می توانیم از flash.nvim برای کمک به ما در اینجا استفاده کنیم. به جای جستجو یا هرزنامه j وت l، ما می توانیم یک کلید کلید را فشار دهیم (در مورد من ، zk) ، و سپس شخصیت هدف را فشار دهید. سپس یک لیست پرش را در کنار هر اتفاق می گیریم a روی صفحه نمایش ، یک کلید منحصر به فرد برای فشار دادن به ما می دهد تا فوراً به مکان هدف منتقل شود. این امر به ما امکان می دهد با وجود اینکه در مکانی کاملاً دلخواه قرار داریم ، آن را در چهار فشار کلیدی به هدف برسانیم. این نیز می تواند سه نفر باشد ، من فقط از فضای صفحه کلید یک حرفی فرار کردم.

نحوه جایگزینی j وت k؟

حالا صادقانه ، j وت k کاربردی بسیار بیشتری از h وت lبشر پریدن به بالا و پایین با یک خط بسیار رایج است. بنابراین ، حافظه عضلانی را به طور کامل دور نکنید …

با این حال ، اگر پرش های بزرگ> 2 خط وجود داشته باشد ، شاید رویکرد بهتری وجود داشته باشد. من می خواهم به شما بگویم که من از پرش های شماره دار استفاده کردم 3j، اما این بیشتر اوقات درست نیست. حتی اگر تعداد خط نسبی را فعال کرده ام ، می فهمم که نگاه کردن به سمت چپ در اعداد من را از حالت تولیدی بیرون می کشد. باید راهی برای پرش از بلوک های بزرگ متن بدون نیاز به دور از متن وجود داشته باشد …

در شرایطی که خط هدف است نه قابل مشاهده ، من دوست دارم از آن استفاده کنم وت بشر این دستورات ، که به ترتیب نیمی از صفحه بالا می روند و به ترتیب نیمی از صفحه پایین می آیند ، وقتی نیاز دارم به سرعت در یک صفحه حرکت کنم ، بسیار مفید هستند.

اگر یک خط هدف شناخته شده و قابل مشاهده باشد ، من از تکنیک های متنوعی استفاده می کنم. اگر مکان نزدیک باشد ( یا هر شخصیت منحصر به فرد ، آسان برای فشار دادن ، من فقط از آن استفاده می کنم f به دنبال شخصیت بیشتر اوقات این کار خوب است. در موقعیت های منحصر به فرد ، من از flash.nvim استفاده می کنم.

{ وت } هنگام برجسته کردن یا مسافرت با بلوک های کد ، با برخی از احتیاط ها بسیار مفید هستند. آنها به سمت بالا و پایین حرکت می کنند تا خط فضای سفید ، که آنها متوقف می شوند (و شامل!). این برای برجسته کردن کل کارکردهای قابل مشاهده در صفحه نمایش عالی است. برای حرکت دقیقاً از طریق کد چندان عالی نیست. اگر روی هر پایه کد با بیش از یک توسعه دهنده کار کرده اید ، می دانید که فاصله به طرز خطرناکی اختیاری است. بعضی از افراد حتی فاصله بین کارکردهای خود را نمی گذارند !!! در یک پایه کد مانند این ، { وت } غیر تعیین کننده شوید.

ciwبا caw، و غیره

اگر نمی دانستید ، خانواده ای از دستورات برای انجام یک عمل در داخل و اطراف یک شیء متن در NVIM وجود دارد. شکل کلی “” است. این در شرایطی که مکان نما شما در ابتدای یک کلمه نیست ، واقعاً مفید است ، اما باید آن را به طور کامل اصلاح کنید. این حتی است بیشتر در هنگام اصلاح بلوک های کد محصور شده در براکت ها مفید است. به عنوان مثال:

fn foo(arg1: i32, arg2: u32, arg3: Bar) void {
  // ...
}
حالت تمام صفحه را وارد کنید

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

اگر می خواهم محتوای آرگومان ها را تغییر دهم ، فقط می توانم تایپ کنم cib برای حذف همه چیز در لیست arg و در حالت درج قرار داشته باشید. شما حتی لازم نیست که در داخل براکت ها ، نقل قول ها و غیره باشید. NVIM در جستجوی وقایع بعدی شیء متن و انجام عمل بر روی آن است.

از تلسکوپ استفاده کنید. بیشتر!

Telescope.NVIM برای پیمایش بین پرونده ها در Neovim بسیار محبوب است. اما این تنها کاری نیست که می تواند انجام دهد! Telescope.NVIM با ده ها تن از ساختمان ساخته شده است که می توانند بسیار مفید باشند. دو مورد علاقه من هستند lsp_document_symbols وت live_grepبشر

اولین مورد برای پریدن در اطراف یک پرونده بسیار مفید است. اگر LSP تنظیم شود ، توابع ، تعریف نوع ، ثابت و بسیاری از نمادهای دیگر را پیدا می کند که می توان آنها را جستجو کرد و به آن پرید. این بسیار مفید است ، به خصوص در پرونده هایی با بیش از هزار خط. پریدن به یک عملکرد ، حتی با سر و صدای زیاد ، بی اهمیت می شود.

دوم بسیار مفید است وقتی می توانید قطعه ای از یک تابع ، تعریف و غیره را به خاطر بسپارید ، اما نمی دانید چه پرونده ای یا کجا در پرونده است. live_grep به شما امکان می دهد تا در یک الگوی خاص در فایلها جستجو کنید. به عنوان مثال ، من می توانم “ماتریس” را در یک پایه کد موتور بازی جستجو کنم تا هر نمونه ای را که “ماتریس” تایپ کرده ام پیدا کنم.

با استفاده از علائم با تلسکوپ. nvim

مارک ها جایی نیستند که به همان اندازه که باید محبوب باشد. من بسیاری از آموزش های مبتدی را می بینم که در مورد استفاده صحبت می کنند wبا bوت e، و شاید f وت t، اما هرگز علامت گذاری نمی کند. هنگامی که به درستی استفاده شود ، آنها می توانند برای گردش کار شما کاملاً انقلابی باشند. این مثال را بگیرید:

const Bar = struct {
  item: i32
};

// hundreds of lines of code...

fn something(bar: *Bar) void {
  bar.item // ...
}
حالت تمام صفحه را وارد کنید

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

ما در حال اصلاح هستیم something، اما توجه داشته باشید که ما باید چیزی را با Bar ساختار ، که صدها خط دور است. ما می توانیم از میانبرهای قبلی برای پرش از نیم صفحه تا زمان رسیدن استفاده کنیم Bar، موقعیت ما را اصلاح کنید و اصلاح کنید. یا ، ما حتی می توانیم از تلسکوپ استفاده کنیم lsp_document_symbols برای پرش مستقیم به نوار (ایده خوب!). با این حال ، هیچ یک از این رویکردها کاملاً یکپارچه نیستند. حتی در رویکرد تلسکوپ ، ما باید چند شخصیت را تایپ کنیم تا زمانی که ساختار نوار را پیدا کنیم. اگر این نوع طولانی تر بود MySuperLongStructName، این می تواند شخصیت های بیشتری را برای شناسایی آن انجام دهد.

ما می توانیم از علائم برای جلوگیری از انجام این کار هر بار که نیاز به پرش به جلو و عقب داریم ، استفاده کنیم. برای ایجاد یک علامت ، یک مکان نما را در جایی که می خواهید علامت باشد قرار دهید و سپس فشار دهید m به دنبال یک شناسه مارک. این باید یک شخصیت مورد پایین باشد. ما می توانیم علامت گذاری کنیم Bar با ma و یک علامت در something با msبشر سپس ، در حالی که ما روی عملکرد کار می کنیم ، می توانیم فشار دهیم 'a پرش به Barوت 's برای پرش به عقب. ما حتی می توانیم علامت را روی چیزی کنار بگذاریم و فشار دهیم برای پرش به آخرین مکان ما قبل از پرش.

بنابراین ، ما می توانیم با تلسکوپ به سرعت علائم را تنظیم کنیم و سپس از آن استفاده کنیم تا از آن زمان به بعد از آن استفاده کنیم. به نظر می رسد که ما سرعت ناوبری خود را حداکثر کرده ایم!

قطعه های سفارشی درست کنید

قطعه ها می توانند به طور گسترده بهره وری را تقویت کنند. بیشتر زبانها مقداری داخلی در LSP دارند. با این حال ، آنها باید به اندازه کافی غیر درگیر و عمومی باشند که همه آنها را بپذیرند. راه اندازی شما است شما راه اندازی ، بنابراین می توانید هر آنچه را که می خواهید بسازید. به عنوان مثال ، من یک قطعه ساده برای ایجاد یک ساختار در زیگ ایجاد کردم:

return {
    s("stru", {
        t({ "const " }),
        i(1, ""),
        t({ " = struct {", "\t" }),
        i(2, ""),
        t({ "", "};" }),
    }),
}
حالت تمام صفحه را وارد کنید

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

این برای افزونه Luasnip ساخته شده است ، که به احتمال زیاد همان چیزی است که شما برای قطعه قطعه استفاده می کنید. این امکان را به من می دهد تا با اجرای ساختار ساختار اسکلت ، “stru” را به صورت خودکار انجام دهم ، که به من امتیاز راحتی می دهد تا محتوا و برگه را درج کنم.

افزونه ها/برنامه های خود را ایجاد کنید

افزونه ها از نرم افزاری های عرفانی نیستند که یک جادوگر باتجربه را برای ایجاد ایجاد می کنند-در واقع برعکس. Neovim از LUA استفاده می کند زیرا افراد بیشتری را قادر می سازد یک افزونه بنویسند تا استفاده از “Vimscript” در VIM سخت تر باشد. شما می توانید و باید برای نیازهای خود افزونه هایی درست کنید.

هیچ کس شما را مانند شما نمی شناسد. بنابراین ، بروید چیزی را که همیشه آرزو داشتید در یک ویرایشگر داشته باشید!

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

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

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

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