пятница, 3 августа 2012 г.

Текстовый редактор vim или vi

После начала работы с кластерами, а также системой Linux я задался вопросом: "Как же удобно и быстро для себя можно редактировать файлы в этих системах (в терминале), не копируя их к себе на компьютер каждый раз?"
Вопрос очень давно меня мучил, т.к. в основном работа ведется в ОС Windows, где все быстрые действия можно делать с помощью мышки, ну или же работа ведется с помощью удобной штуки Far manager, в то время как через терминалы SSH доступа визуальные и графические оболочки в большинстве случаев недоступны. Находясь в этом году на суперкомпьютерной академии в МГУ, я заметил, что многие пользуются редактором vi.
В чем же его удобство?
На первый взгляд он выглядит очень просто. Открывая файл с его помощью

vi myfile 

вы получаете содержимое файла прямо в терминале. Ничего особенного, казалось бы. Но когда мне показали, что можно с его помощью быстро редактировать файл, в частности, копировать, удалять, перемещать, вставлять строки, слова, символы, целые страницы и вообще все что хочешь простыми нажатиями на клавиши клавиатуры, то я увидел в чем его мощь.
Действительно, стоит только научиться работать этими простыми комбинациями клавиш и понять как это работает и все будет очень легко и просто, это сэкономит уйму времени при редактировании файла.
Вот кратенькая инструкция, которую я составил, бродя по просторам интернета и ища информацию про этот чудный редактор.


Клавиши перемещения:
h, j, k, l – соответствуют стрелкам влево, вниз, вверх и вправо;
0 («ноль») – в начало текущей строки;
^ - к первому не пробельному символу в строке;
$ – в конец текущей строки;
e – последний символ следующего слова;
w – на слово вправо, первый символ следующего слова;
b – на слово влево;
W – до пробела вправо, переход по длинным словам;
B – до пробела влево, переход по длинным словам;
( - передвинуть курсор назад на предложение (до точки);
) - передвинуть курсор вперед на одно предложение;
} – абзац вниз (до пустой строки);
{ – абзац вверх;
Ctrl+End – перейти на последний символ последней строки файла;
<number>G или <number>gg – перейти на конкретную строку <number> ;
f<symbol> – передвинуться вперед (forward) к символу <symbol> в текущей строке;
F<symbol> – назад (backward) к символу <symbol> в текущей строке;
; – для того что бы повторить последнюю команду f или F;
, - повторяет поиск, но в отличии от «;», в обратном порядке;
t<symbol>/T<symbol> - то же что и описано выше, но при этом курсор устанавливается прямо перед символом, а не на сам символ;
H – передвинуть курсор наверх экрана;
M – передвинуть курсор в центр экрана;
L – передвинуть курсор вниз экрана;
<number>% – передвинуть курсор в соответствующее место документа;
Ctrl+d или Ctrl+f – на страницу вперёд;
Ctrl+u или Ctrl+b – на страницу назад;
% – когда под курсором находиться скобка, то нажатие на % переместит курсор на соответствующую парную скобку(),] или }), при повторном нажатии вернется обратно;
[{ - позволяет переместиться назад по тексту к символу скобки, которая является отрывающей текущий блок кода;
]{ – вперед к закрывающей скобке текущий блок кода;


Примеры использования:
3G - перейти на строку под номером 3;
ft – передвинуть курсор на ближайший символ «f» в строке, потом нажав «;» – перейти на следующий символ «f», если он еще встречается в строке;
gd – перейти к объявлению функции или переменной, которая находиться под курсором;
gD – перемещает к определению глобальной переменной;


Нужная особенность редактора. Если нужно открыть файл на какой-то конкретной строке (допустим, чтобы посмотреть ошибку в этой строке), то можно набрать команду

vi +num myfile

где num - номер строки, например, чтобы открыть файл на 303 строке, нужно набрать

vi +303 myfile 

Для просмотра последней строки файла достаточно написать просто

vi + myfile

После того, как понятно как перемещаться по файлу, можно перейти к командам редактирования.


Клавиши удаления:
x - удалить символ под курсором;
X - удалить символ влево (удалить символ перед курсором);
d<символ(ы)_перемещения> - удаляет с символа под курсором до положения после ввода команды перемещения;
dd - удалить текущую строку;
d<число_строк>d - стирание числа строк начиная с текущей;
d+ - удаляет текущую строку и следующую за ней;
d/<pattern> - удаляет текст начиная с текущего положения курсора до первого встретившегося "pattern", не включая его;
daw - удаляет слово, даже когда курсор находится в середине этого слова;
D - вырежет текст от позиции курсора и до конца текущей строки (аналог d$);
Весь удаляемый текст переносится в буфер обмена, откуда позже может быть вставлен.

Примеры использования:
d^ - удаляет символы с текущего до начала строки;
ciw - удаляет слово под курсором и переходит в режим вставки;
4x - удаляет 4 символы вперед начиная с символа под курсором;

Клавиши удаления с переходом в режим вставки:
s - вырезать текущий символ и оставить редактор в режиме вставки (аналогична xi);
S - вырезать текущую строку и оставить редактор в режиме вставки (аналогична cc);
с - команда аналогичная d, но после удаление переходит в режим ввода;
C - вырезать текст от курсора до конца строки и оставить редактор в режиме вставки;
cc - вырежет текущую строку и оставит редактор в режиме вставки;
r - заменить один символ под курсором;
R - перейти в режим ввода с забиванием текста (режим замены);

Клавиши копирования и вставки:
yy - копирование текущей строки в неименованный буфер;
y<число>y - копирование числа строк начиная с текущей в неименованный буфер;
Y - скопировать весь текст, подобно yy (аналог y$);
p - вставка содержимого неименованного буфера под курсором;
P - вставка содержимого неименованного буфера перед курсором;
]p – подобно p, но автоматически подбирает отступ для вставки кода;


Клавиши отмены:
u – отмена последней команды;
U – отмена изменений во всей строке;
Ctrl+r – отмена отмены;

Переход в режим вставки:
Режим вставки позволяет набирать текст в файле
i – перейти в режим ввода с текущей позиции;
I – переместиться в начало строки и перейти в режим ввода;
a – вставить текст справа от текущего символа;
A – вставить текст в конец текущей строки;
o – перейти в режим ввода с новой строки под курсором;
O – перейти в режим ввода с новой строки над курсором;

Другие не менее полезные действия:
. – повтор последней команды;
J – слияние текущей строки со следующей;
`. – перейти к строке, которая редактировалась последней;
` дважды – переход между двумя последними позициями курсора;
‘ дважды - переход между двумя строками, где находились позиции курсора;
>> – сдвинуть вправо строку (в визуальном режиме – весь выделенный текст;
<< – тоже самое, что и >>, но сдвиг происходит влево;
K – посмотреть man-страницу слова под курсором;
gf – открыть файл с именем, находящимся под курсором;
Ctrl+a – перемещает курсор на ближайшее число и увеличивает его на единицу;
Ctrl+x – перемещает курсор на ближайшее число и уменьшает его на единицу;
~ – меняет регистр букв на противоположный по мере прохождения курсора;
g~~/guu/gUU – меняет регистр на противоположный/нижний/верхний во всей строке;

Это еще не все возможности данного редактора, но все необходимые :)

Информация была взята с сайтов
http://system-administrators.info/?p=1193
http://funix.ru/programs_utilities/klavishi-i-kombinacii-klavish-vim.html


Комментариев нет:

Отправить комментарий