В статье рассматриваются базовые приемы для работы в редакторах vi/vim с примером компиляции простейшего консольного приложения из репозитория.
Поскольку основная трудность состоит в специфике процесса правки исходника (шутка про самый частый вопрос как выйти из редактора vi возникла неспроста), упор делается на объяснение способов добавления, удаления, поиска, вставки и копирования, сохранения исходника.
sudo pacman -Sy gcc
Если vi/vim не установлен, то добавляем редактор
sudo pacman -Sy vi vim
Создадим новую папку для проекта
mkdir hello_world
Перейдем в этот каталог
cd hello_world
Создадим новый файл hello.cpp
vi hello.cpp
#include <iostream>
using namespace std;
int main(){
cout << "Hello, world";
exit(0);
}
Чтобы разобраться, умышленно допустите пару опечаток.
Предположим, мы делаем опечатку и нужно удалить текущий символ.
У vi следующая философия работы с текстом - так как мы хотим осуществить действие - это команда редактирования, то чтобы ее выполнить, стало быть, надо выйти из режима вставки и перейти в нормальный (редакторский) режим, поэтому нажимаем esc (перешли в нормальный режим), перемещаем стрелки к символу, который нужно стереть и нажимаем x, повторяем столько, сколько нужно, затем снова нажимаем i, чтобы вернуться в режим вставки текста. Нормальный начальный режим предназначен не для набора текста, а для редактирования и навигации по файлу.
У vi/vim есть и третий режим - режим интерператора (командный)
В нормальном режиме нажмите двоеточие : - внизу экрана появится приглашение для ввода команды. Нажмите enter и команда будет выполнена и vi вернется к нормальный режим.
Если нужно удалить текущую строку целиком, выходим в нормальный режим esc, затем жмем dd
Другие удобные команды для быстрой правки в нормальном режимеnx | удалить n символов, например 6x - сотрет 6 букв |
d5w | удалить 5 слов |
d$ | удалить все от курсора и до конца строки (справа) |
d^ | удалить все от начала строки и до курсора (слева) |
j, k, h, l | вниз, вверх, лево и вправо (аналог стрелок) |
^ (каретка) | курсор на начало текущей строки |
$ | курсор на конец текущей строки |
nG | поставить на линию с заданным номером ( 4G переведет на 4 строку).Удобная команда, если нужно исправить опечатку, когда вы знаете в какой строке ошибка. |
:номер | перейти к строке с заданным номером, аналог nG |
G | перевести на последнюю строку |
w | к началу следующего слова |
nw | вперед на n слов ( 4w на 4 слова вперед) |
b - | к началу предыдущего слова |
nb | на n слов назад ( 4b на 4 слова назад ) |
{ | назад на один параграф |
} | вперед на один параграф |
u | отмена последнего действия (можно удерживать) |
10u | отменить 10 последних действий |
U (заглавная) | убрать все изменения в текущей строке |
ctrl+r | ( в нормальном режиме, r от слова redo) Однократный повтор |
10 ctrl+r | вернуть 10 действий |
Переведите курсор на слово, нажмите * (звезда), чтобы найти следующее аналогичное вхождение или # (решетка), чтобы найти предыдущее.
В vi/vim поддерживаются регулярные выражения (regular expressions) при сопоставлении с образцом.
Например, \<\(void\|main\|exit\)\> будет искать вхождения или первого, или второго или третьего слова
Чтобы сохранить текст, переводим редактор из нормального в командный режим Esc, нажимаем клавишу : двоточие. Вводим wq - чтобы записать (write) и выйти (quit), enter
q! - выйти без сохраненияg++ -Wall hello.cpp -o hello
Параметр -Wall - ключ для компилятора, выставляющий настройки. О флагах компиляции кратко по ссылке
Если текст набран верно, то будет собран исполняемый файл. Если в тексте ошибки, компилятор напишет, в каком участке искать ошибку, и нужно вернуться к файлу в vi, чтобы внести исправления. Команда терминалаvi hello.cpp
как создает файл, так и позволяет открыть на чтение существующий. Для перемещения к строке с ошибкой используйте комбинацию :номер
vim hello.cpp
Введем команду :terminal
Увидим, что окно vim разделил на две панели - в одной можно править текст - в другой можно запускать из командной строки компилятор.
Теперь не надо выходить из редактора, чтобы работать с компилятором.
Переключаться между окнами можно с помощью мыши. Потянув за заголовок окна, можно изменить его размер :below terminal - открыть окно терминала внизуyy or Y | скопировать текущюю строку, включая перевод строки |
3yy | скопировать три строки |
y^ - | скопировать влево (от начала до текущей) |
y$ | скопировать до конца текущей строки, но без перевода каретки |
yiw | скопировать текущее слово (без обрамляющих пробелов) |
yaw | скопировать текущее слово (включая пробелы) |
ytx | взять между курсором и заданным символом |
yfx | взять между курсором и заданным символом, включая его |
gp | вставить текст после курсором и перейти к позиции после вставки |
gP | вставить текст перед курсором и перейти к позиции после вставки. |
""
Нумерованные регистры - от "0
до "9
Регистр малого удаления "-
Именнованные буквенные "a
до "z
или "A
до "Z
Регистры только на чтение ":, "., "% и "#
Регистр для выражения "=
Регистры выделения "*, "+ и "/home/artem
Регистр черной дыры "_
Регистр истории поиска (хранит последний образец) "/
Перед командой копирования - вставки можно указать регистр. Таким образом, в отличие от стандартных редакторов, vi/vim имеет много буферов обмена, что способствует более продуктивной правке.
Например, скопировать текст из vim в буфер операционной системы"*y
, вставить из буфера операционной системы "*p
mkdir hello-github
, переходим в нее cd hello-github
Клонируем (скачиваем исходный код)
git clone https://github.com/jsanelli/cpp-HelloWorld
Переходим в каталог cpp-HelloWorld - cd cpp-HelloWorld
ls
чтобы просмотреть список файлов, можем открыть в vi
и что-то подредактировать.
Выполняем mkdir build
для создания каталога для сборки
Выполняем cmake . -B build/
для подготовки
Окончательно линкуем и компилируем cd build
, затем make
Пробуем запустить - ./demo test,
выведет Hello, test
С помощью make
можно детально настроить процесс сборки исходного кода в исполняемый. Рассмотрение make и git в деталях выходит за рамки статьи.
Отметим для полноты картины, что для написания установочного пакета в рамках ArchLinux необходимо также написать PKGBUILD файл, в котором детализирован процесс сборки и установки, там и применяется утилита make. Затем с помощью утилиты makepkg создается установочный pkg файл. Имея PKGBUILD файл, пользователь может установить программу с помощью команды makepkg -si из исходников или путем вызова pacman -U имя_пакетного_файла После сборки пакета становится возможным распространять программу через AUR или другую пакетную систему.
Теги документа