Может войдёшь?
Черновики Написать статью Профиль

Мастерство Vim: Автодополнение

перевод Laracasts Мастерство Vim

Это перевод видео-урока с Laracasts, серия Vim Mastery, урок №17Auto-Completions от . Перевод обновлён . Опечатка? Выдели и нажми Ctrl+Enter.

(0:00)
Сейчас нам определенно нужно вспомнить о автоподстановке. Давайте откроем редактор. Я переключусь в файл контроллера, куда я только что добавил три метода для примера. Давайте представим, что я хочу вызвать здесь метод PHPotherFunction. Сейчас мы вроде как должны ввести все полностью. Мы не хотим так делать. Вместо этого, у нас есть несколько вариантов. Первая — мы можем использовать Ctrl+N. Вот так.

(0:30)
Это откроет список предопределенных файлов и всех совпадений. В нашем случае — все что начинается с other. Теперь я нажму N для перемещения между ними. И я не должен нажимать Enter, как во многих редакторах. Если нажму Enter, это просто создаст новую строчку. Вместо этого, вы выбираете нужный вариант и просто продолжаете набирать. Но, заметили ли вы, как... давайте проделаем это снова, Ctrl+N. Тут много вариантов. Откуда некоторые из них?

(1:00)
Все это определено в нашей настройке complete. Если ввести :set complete без значения... Здесь то, что имеется на данный момент. В этом случае это символы через запятую. Вам не нужно запоминать это. Я вот точно не помню и использую шпаргалку. Точка ставиться для каждого символа (symbol), так сказать, в текущем буфере. Это означает что, если я установил complete=..

(1:30)
И мы попробуем это снова: oth, Ctrl+N... Теперь мы видим только результаты автоподстановки для этого буфера. Я могу выбрать тот, какой хочу и продолжить вводить. Но, что, если мы хотим разные буферы? Или, возможно, у нас есть разделение на окна. Давайте перейдем в мой класс User. И нам нужны результаты автоподстановки для него также. Может быть это метод PHPisSubscribed, который мы создали недавно. Теперь, основываясь на текущей настройке, мы не можем сделать это. И теперь, фактически... Очень быстро заметим кое-что:

(2:00)
Если вы используете что-то, вроде PHPStorm, то плюсы в том, что он изначально понимает язык PHP. Конечно, другая сторона этого в том, что он определенно медленнее, чем Vim (за удобство приходится платить). Но плюс в том, что он понимает язык. В этом случае, подход Vim проще, он не знает, подходит ли текущий объект для PHPisSubscribed или нет. Нет. Он просто скажет “я видел эту последовательность букв в другом буфере и предлагаю их как вариант”. Это все, что он сделает.

(2:30)
Как бы там ни было, давайте продолжим. Если я нажал Ctrl+N — ничего не найдено. Потому, что мы должны быть точными. Я могу ввести :set complete=.,w (точка для текущего буфера, w для любого другого окна)”. И, в этом случае, это то, что нужно. Давайте попробуем еще раз: Ctrl+N. Теперь, определенно, только одно совпадение — PHPisSubscribed. Он автоматически подставить это для вас. Но, если мы добавим другое — PHPisSomethingElse() { return true; }.

(3:00)
Окей, сейчас будет также предложен вариант: is, Ctrl+N — теперь можем выбрать из них. Довольно здорово, не так ли? Введу :q, чтобы закрыть этот буфер. Но я не будут очищать его пока. Это важно для понимания. Давайте рассмотрим это быстро. ls — список всех моих буферов. В данном случае только два. Теперь, если бы я ввел :bd, то я очистил бы текущий буфер. Если я посмотрю, то не увижу его больше.

(3:30)
Однако, если мы откроем класс PHPUser, опять же, он тут. А, если я переключу буфер... Давайте перейдем в этот. Буфер 1. Да, он до сих пор здесь, потому что мы не удалили его. Если бы мы... Позвольте дать небольшой совет. Вам не нужно заучивать его, но если вам это нравится... Если вы когда либо захотите разделить окно, но использовать для него существующий буфер, третий в нашем случае,

(4:00)
вы можете использовать :sbuffer. Разделить буфер по индексу. В нашем случае, снова, индекс равняется 3. Я могу ввести :sbuffer 3. Готово. Теперь мы видим PHPUser. Еще раз — Ctrl+N для перемещения по вариантам снизу вверх. Но, если бы мы закрыли это, но не удалили буфер (он до сих пор здесь) — мы не смогли бы сделать этого больше. Ctrl+N — это не вариант. Давайте обновим наш список подстановки для текущего буфера, для

(4:30)
любого текущего окна, любого другого загруженного или незагруженного буфера. Трюк должен сработать. Снова — Ctrl+N — и теперь мы видим варианты тут. Я хочу донести это до вас. Это сбивает с толку на первый взгляд, это только потому, что User — это загруженный буфер. Если бы я очистил этот третий буфер. Посмотрим... его больше нет. Если попробуем автоподстановку — его нет. Давайте двинемся дальше. Было бы неплохо, если бы мы могли использовать простую подстановку табуляцией.

(5:00)
Какую вы, возможно, используете в других редакторах. Сейчас, если я напишу “other”+Tab — да, я хочу видеть тут автоподстановку. Организуем это. Ключ к решению, в том, чтобы установить supertab. Снова, — это должно быть уже обычной процедурой для вас. Перейдем вниз: Plugin, вставим его. Перейдем в файл .vimrc. Сохраним его (он перезагрузится). И, далее, запустим установку плагина.

(5:30)
Это должно работать более или менее из коробки. Закроем это. Теперь, если я напишу %%(t)other% и Tab — это работает. В этот раз я продолжу нажимать Tab для передвижения по вариантам. Теперь, это может повлечь новую проблему. Выйдем отсюда. Я полностью выйду и перезапущу редактор. Хорошо, вернемся в контроллер. Взгляните сюда. Если я нажму Tab, заметьте, нет больше отступов. Он считает, что я хочу автоподстановку.

(6:00)
Я изучал это. Как выяснилось, проблема в одном из наших плагинов. Поэтому давайте перейдем в vim/plugins.vim. Вообще-то, мы должны исправить это. Обратите внимание, что я изменил этот файл, но не сохранил его. Когда я пытаюсь изменить его, он не разрешает и выбрасывает ошибку. Еще раз: plugins.vim... Нет, “вы не записали”. Я должен был бы сохранить его и потом переключиться в файл. Весьма раздражает.

(6:30)
Было бы здорово, если бы я мог изменить файл: foobar. Далее, если я даже не сохраню его и переключусь в новый файл, он автоматически сработает. Мы можем проделать это без труда. В нашем файле .vimrc: set autowriteall. Теперь мы должны прокомментировать “Автоматически сохранять файл при переключении буферов”. Теперь это будет решено. Если я напишу белиберду и мы попробуем отредактировать файл плагина...

(7:00)
Изменим и это автоматически сохранит предыдущий буфер. Удобно. Как оказалось, проблема в нашем плагине snipmate. Сейчас он добавлен в официальный исходный репозиторий. Однако, если мы посмотрим на него и на историю коммитов, они не обновлялись с 2010 года. Несмотря на то, что он оригинальный, он больше не поддерживается. Похоже, вот тут есть форк. И он гораздо новее. Если посмотреть в историю коммитов, да, он обновлен всего несколько месяцев назад, от момента, когда я записываю курс.

(7:30)
Похоже, он мешает нашему плагину supertab, по крайней мере так сказано на StackOverflow. Хорошо, вставлю его. Далее, перезагружу и переустановлю. Надеюсь трюк сработает. Вообще-то, не уверен, сейчас узнаем это вместе. Удалим это, сохраним и выйдем отсюда, просто, чтобы убедиться, что мы начали с нуля. Похоже, что какое-то расширение пропущено. Давайте посмотрим здесь. Да, вот оно.

(8:00)
Похоже, нам нужен snipmate, но также нужны эти две вещи. Прошу прощения. Откроем Vim, отредактируем наш файл plugins. Прокрутим вниз и посмотрим. Вставлю все это сюда. У нас теперь есть зависимость 1, зависимость 2 и, собственно, snipmate. Сохраним это и выполним :PluginInstall.

(8:30)
В этот раз, снова, давайте начнем с нуля и, надеюсь... Да, работает. Если я перейду сейчас в свой контроллер, прокручу вниз... Если я нажму тут Tab — готово. Похоже, теперь это исправлено. Снова — если я выполню :set complete... Заметьте, так как мы не сохранили это в файл .vimrc, то все вернется в начальное состояние. Теперь я могу ввести PHP$this->other, Tab и будет автоподстановка. Отлично. Это означает, что все, что осталось сделать — сохранить это в наш файл .vimrc.

(9:00)
Вот тут внизу введем set complete=.,w, b,u (b — другие наши буферы, u — любые другие незагруженные буферы). Окей: “Установка желательных автоподстановок и совпадений”. На этом этапе еще один небольшой совет. Если я нажму заглавную J — это присоединит нижнюю строку к верхней.

(9:30)
Если я введу foo, bar и затем в верхней строке нажму J, он возьмет нижнюю строчку и присоединит к текущей. Слишком много действий, не так ли? Это должно сработать для нас. Теперь, если я напишу PHP$this->, Tab, мы получим все эти варианты. Или, как обычно, введем первые буквы и нажмем Tab, чтобы получить нужное. Знаете что? Тут можно еще много чего сказать. Есть плагины, которые людям нравятся. Есть довольно популярный плагин, который называется YouCompleteMe.

(10:00)
На данном этапе, я стараюсь оставлять всё таким простым, насколько возможно. Вы можете обойтись без того, что я показываю. И, не забудьте, благодаря нашему небольшому предыдущему сниппету, я могу ввести ,su, чтобы отсортировать это автоматически. Некоторые люди... Это не влияет ни на что, но некоторые люди предпочитают сортировку по алфавиту. Это не плохо и не хорошо. Лично для меня так. Сортировка по длине не нравится вам больше? Не знаю. Это дело вкуса. Это не влияет ни на что. Увидимся в следующем видео.

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.