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

Мастерство Vim: Метки

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

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

(0:00)
Следующий шаг — это метки (marks). Это родная функция в Vim. Когда вы помечаете какую-то часть кода, то позже можете вернуться к ней с помощью простого нажатия клавиши. Например, может быть вы правите PHPAuthController. У меня есть G, чтобы перейти вниз файла. Может быть, мы работаем сейчас в этом разделе, но, к примеру, решили, что хотим просмотреть другой файл сначала.

(0:30)
Если мы хотим посмотреть PHPUser, мы идем в класс PHPUser, делаем что бы то ни было в нем. И далее, когда вы, например, нашли то, что нужно, вы можете вернуться обратно двумя разными способами. Первый — можно использовать Command+E, чтобы просто вернуться в предыдущий файл. Это сработает. Или вы можете нажать Ctrl+6 и это перенесет вас обратно в предыдущее место. Или — в этом месте, позвольте вернутся в PHPUser — вы можете нажать Ctrl+O и это отправит вас обратно в место предыдущей правки.

(1:00)
Вы можете нажать Ctrl+I, чтобы сделать противоположное. Итак, Ctrl+O — перейти назад, Ctrl+I — перейти вперед в вашей истории. Но вы обнаружите, что в реальности, вы обычно переходите к нескольким разным файлам. Поэтому нельзя просто нажать Ctrl+O и перейти точно туда, где вы были. Возможно, вам придется пролистать 5 разных файлов. Это делает метки весьма полезным. Вот, что мы можем сделать. Давайте вернемся в наш PHPAuthController. И, скажем, мы работаем тут, но хотим сначала проверить какую-то вещь.

(1:30)
Итак, поставлю метку, нажав букву m и, далее, любую букву. К примеру, введу снова m. Теперь мы создали метку и назначили клавишу m для неё. Теперь, мы можем проверить это, введя :marks. Вот тут. Вы можете видеть, как Vim создает группу меток сам по себе. Мы посмотрим несколько из них. Есть очень полезная — одинарные кавычки. Вот та, которую мы создали. Теперь мы пометили эту конкретную позицию.

(2:00)
Это значит, где бы то ни было в этом файле, если мне нужно вернуться на эту строчку... Скажем, перейдем вверх, нажав gg. Теперь, чтобы вернуться туда, я могу нажать ` и, далее, клавишу m. Мы переместились точно туда. Попробуем еще раз. Пометим этот раздел. Нажимаем m для пометки. И, снова, — берем любую букву, все что угодно, например, a в этот раз. Теперь, если мы посмотрим — я назначил букву тут. Это означает, что в любом месте этого файла, я могу вернутся в это место.

(2:30)
`a — мы вернулись. Обратите внимание, если мы перейдем в любой другой файл, например, server.php... Если я введу это здесь, `a — нет, пометка не сработала. «Нет такой метки». Потому что, когда вы ставите метку... Это нужно запомнить. Если вы используете строчную букву, то это ограничивает вас текущим буфером. Но, с другой стороны, если использовать заглавную букву, метка будет работать по всем файлам.

(3:00)
В качестве общего правила я всегда использую заглавную букву. Это означает, я бы сделал так. Чтобы вернуться сюда, я нажму mM. Теперь я могу вернуться именно к этому месту из любого файла. Я нажму Command+E, чтобы перейти в файл gulpfile.js. И, если мне нужно вернуться туда, в любую точку, опять — `M. И я вернулся точно туда. Представьте что-то, вроде этого. Я введу ,lr — маппинг, чтобы перейти в файл routes.php.

(3:30)
И, скажем, мы создадим POST-маршрут. Что-то вроде этого: PostController@store. Теперь представьте, что в каком-то представлении вы создаете форму. Например, здесь. Напишем <form method=”post” action=... И теперь вы думаете: “я не помню, какой именно был URL”. Хорошо, нет проблем. Нажмем mMТеперь мы можем перейти в файл routes.php. Можем найти его внизу. Да, мы просто назвали его posts.

(4:00)
Хорошо, скопирую его: yiw. Это скопирует слово между кавычек. Теперь я не должен больше искать представление welcome. Мы создали пометку. Я могу нажать `M. Теперь вы можете вставить это сюда. Но тут, фактически, мы можем сделать еще кое-что. Заметьте, как... Давайте проделаем это снова. Оставлю курсор в этом месте, на двойных кавычках. И создам метку: mM. Далее перейдем в наш файл routes.php: ,+l+r, как мы ранее установили.

(4:30)
И теперь, когда мы вернулись туда: `M. Это переместит меня, куда нужно, но на начало строки. Это небольшая инверсия. Если мы вернемся к метке, но для этого будем использовать обратную кавычку... Вот так: `M — это возвратит вас к строке и также в конкретное место на строке. Теперь я могу нажать p, чтобы вставить это. Это понятно. Давайте проделаем это вместе еще раз. Нажму u, чтобы отменить. Итак, mM, чтобы поставить метку.

(5:00)
Перейду в файл маршрутов. Найду posts. Скопирую его: yiw. Далее выполню `M, чтобы вернуться. И, далее, p, чтобы вставить. Здорово. Теперь, если быть откровенным, это работает для любого количества меток. Добавьте это в свою практику. Думаю, вам понравится. Но истина в том, что вы можете сделать даже немного больше. Например, так как это Vim, вы можете работать с этими метками на его языке.

(5:30)
Например, вообразите, что работаете тут над стилями . Я могу выполнить vit, чтобы выделить все между тегами. Просто покажу. Может быть вы решите, в качестве примера, из всех стилей оставить здесь только .title. Мы можем избавиться от всего этого. Забавный эксперимент в том, как вы справитесь с этим. Например, вы можете просто нажать V и удерживать k. Некоторые говорят, что удерживать клавишу нажатой это антипаттерн. Они все усложняют.

(6:00)
Это нормально. Особенно, если вы установите свою частоту нажатия очень-очень быстрой. Не так важно в конце концов. Но вы можете делать так. Затем нажать d, чтобы удалить. Еще одним вариантом, опять же, является V. И далее, вы должны нажать Ctrl+D, чтобы выделить вниз до нужного места. И нажать d. Это, возможно, самый простой и естественный подход. Но третий вариант в том, чтобы использовать метки, если хотите. Например, если я хочу удалить все до этой строчки, я могу создать метку: PHPmm.

(6:30)
В этом случае мы не должны использовать заглавную. Она может быть только для этого файла. Итак, mm и, далее, мы можем перейти вверх. Теперь, если я хочу удалить все до этой метки, я могу нажать d`m. Здорово, не так ли? Я должен использовать это, возможно, когда появляется необходимость. Но это вообще-то довольно изящно, если подумать.

(7:00)
Помните, — повторимся, это Vim, — если я хочу выделить до этого места: v`m. И теперь я выделил все до этой строчки. А если вы хотите сделать замену... Хорошо, c`m — и теперь мы удалили все и переключились в режим вставки. Другой пример этого. У нас есть форма... Давайте закончим с ней. Может быть здесь у нас... В этом месте мы должны поменять количество пробелов в отступе. Их слишком много. Но это очень просто. Введем type=”text”. Полей может быть несколько.

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

(8:00)
В этом весь Vim. Однако, когда вы хотите сделать это, то на практике обнаружите, что нажимаете снова V и просто протягиваете выделение вниз, нажимая j на полсекунды и затем нажимаете d. Это нормально. Это то, что, возможно, сделал бы и я. Но как только вы освоите метки, они станут вашей привычкой. Да, это тоже вариант. Итак, ставим метку и уходим выше. И в реальной практике, вы, возможно долго мотаете вверх по странице. Это имеет больше смысла в этом случае. Итак, d`m удалит все до метки.

(8:30)
Есть еще несколько других вещей. Давайте закончим с ещё одним примером. Мы работаем в нашем представлении welcome. Но, представьте, что мы закрыли его. И затем, если вы открыли Vim снова... Если вам нужно вернуться в этот файл, то, да, вам нужно нажать Ctrl+P и промотать до него. Но, помните, как я сказал раньше, что некоторые метки устанавливаются автоматически. Посмотрим сюда. Обратите внимание на метку 0. Она установлена автоматически на место вашей предыдущей правки.

(9:00)
Помните, что она останется после окончания работы с Vim. Если вы закроете и откроете приложение снова, Vim запомнит метку. Это значит я могу нажать `0 и мгновенно перейти в последний файл, над которым работал. Здорово, правда? Если это не работает, вот вам небольшой совет. Попробуйте сделать так: shcat ~/.viminfo. И если вы не видите что-то вроде этого... Если вы получили отказ в доступе, это значит вам нужно изменить доступ к файлу. Вы можете, например, поменять владельца на вашего пользователя.

(9:30)
Мое, к примеру, — jeffreyway. И, далее, применить это к файлу .viminfo. Это должно помочь. Разве не отлично? Скажем, вы работаете над классом PHPKernel. И, далее, по какой-то причине... например, подошло время обеда и вы закрыли его. Когда вы вернетесь, просто нажмите `0 и вы мгновенно окажетесь в месте, на котором закончили.

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

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

Разметка: ? ?

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