Zsh-подібне вкладка часткових шляхів


11

Пов’язане з частковою вкладкою Bash для імен файлів у Vim

Однією з дійсно фантастичних особливостей програми zshє те, що ви можете, наприклад, набрати ls /u/s/m/m/who.1, натиснути Tabта завершити ls /usr/share/man/man1/who.1.gz. Після того, як ви звикнете до цього, насправді прикро повертатися до нього /u<tab>/s<tab>/m<tab>/m<tab>..., особливо коли весь частковий шлях може вирішити лише один фактичний шлях, але кожен окремий компонент може мати декілька доповнень. Чи можна цього досягти у Vim, наприклад, при використанні :eабо :cd?

У zsh є й інші корисні функції, пов'язані з шляхом, такі як використання cd foo barдля переходу до еквівалентного шляху із fooзаміненим на bar(тобто /blah/foo/baz/yadaстає /blah/bar/baz/yada). Якщо є рішення, яке приносить і це (по суті, передача завдань, пов’язаних з оболонками, оболонці, яка робить це дуже добре), було б чудово.


1
Я не знаю нічого, що досягає саме того, про що ви запитуєте, але є різні нечіткі файли, які дозволяють вам відкривати файли аналогічно. Я віддаю перевагу CtrlP, але є також Command-T, і я впевнений, що є інші, про які я забуваю ім'я.
Багатий

1
@Rich Поки мені не доведеться розминати Tab десяток разів, я був би радий.
муру

Подібне питання щодо СО вже є .
romainl

Відповіді:


6

Раніше я часто використовував CtrlP та інші пов'язані плагіни, поки я справді не виявив власні сили vim. Дозвольте пояснити кілька способів зробити це, не вимагаючи зовнішнього плагіна:

  1. :e, приємна річ у тому, що ви можете зробити щось на кшталт, :e /u*/s*/m*/m*/<Tab>і vim розширить це автоматично для вас :e /usr/share/man/man. Це набагато коротше і простіше, ніж те, що ви розмістили, але ще кращий спосіб - це зробити :e /usr/**/man<Tab>, щоб він рекурсивно виглядав під /usrта перелічував усі відповідні шляхи, це може зайняти час, хоча залежно від того, наскільки великий набір, але в Проект цей творить чудеса, тому що ви можете зробити щось на кшталт, :e ap**/jav**/user<Tab>і він завершить усі неповні шляхи та дасть вам список відповідних шляхів і працює чудово.
  2. :b, Щоб відкрити існуючі буфери. Це дійсно потужно, оскільки він за замовчуванням приймає частинки, тому ви можете просто зробити щось на кшталт, :b usr*man<Tab>і воно завершить ім'я файлу, якщо воно вже завантажено в список буфера. Це особливо добре, оскільки це майже миттєво і дуже швидко. Також я активно використовую сеанси vim, за допомогою tpope / vim-obsession та dhruvasagar / vim-prosession , які зберігають усі файли, які я відкриваю, у буферному списку, і вони доступні, навіть якщо я існую vim та повертаюся до нього каталог проектів.

1
/u*/s*/m*/m*/<Tab>як я працював навколо баш. Це не замінює zsh на милю. /usr/**/man<Tab>жахливо повільно, коли у вас відкрита вся файлова система, але може бути корисною для невеликих проектів. Якщо я неправильно розумію :b, це не для відкриття нових файлів.
муру

@muru ти маєш рацію, це не заміна zsh, але все-таки краще, ніж самостійно набирати всю річ, це робити це простіше, **насправді жахливо повільно, але працює добре для звичайних проектів. :bпризначений для існуючого відкритого буфера, тому використання сеансів допомагає.
Dhruva Sagar

5

vim-zsh-path-завершення передбачає робити саме те, що ви просите (принаймні перша частина), але я ніколи цього не пробував. (Я навіть не чув про це, поки romainl не зв’язав відповідь автором на відповідь , хоча його документація також містить кілька обмежень.

На додаток до цього, існують різні нечіткі файлові пошуку, які досягають чогось подібного для відкриття файлів.

Мій прихильний плагін для цього - CtrlP . Використовуючи для відкриття файлів, він шукає файли, повний шлях яких містить символи, які ви вводите в правильному порядку - вам не потрібно вводити частини кожного компонента шляху (і всі роздільники шляху), як ви у вашому прикладі, але це прекрасно працює, якщо ви робите. Він також використовує той же інтерфейс для відкриття нещодавно використаних файлів та відкритих буферів тощо.

За замовчуванням він відображає <c-p>в звичайному режимі, щоб відкрити рядок CtrlP. У запиті відображається список файлів, який звужується під час введення символів. Ви можете натиснути Enterв будь-якій точці, щоб відкрити вибраний на даний момент файл, або використовувати <c-k>та <c-j>переміщувати виділення вгору та вниз по списку файлів, які наразі відповідають.

Ще одна популярна альтернатива - Command-T , але я віддаю перевагу CtrlP, оскільки вона реалізована у VimScript; Command-T має компонент Ruby.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.