Руководство по VIM

Поиск файла для редактирования

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ VIM — Брам Мооленаар

Поиск файла для редактирования

Файлы в системе находятся повсюду. Как найти нужный? Vim предлагает несколько способов для перемещения по дереву каталогов. В вашем распоряжении команды, которые позволяют переходить к файлу, который упоминается в тексте. Кроме того, Vim помнит файлы, которые вы редактировали раннее.

22.1    Проводник по файловой системе
22.2    Текущий каталог
22.3    Поиск файла
22.4    Список буферов

Следующая глава: Редактирование особых типов файлов
Предыдущая глава: Уйти, чтобы вернуться
Содержание: Руководство пользователя Vim


22.1 Проводник по файловой системе

В Vim имеется модуль, который позволяет «редактировать» каталог. Попробуйте:

:edit .

Благодаря автокомандам и сценариям Vim в окне появится содержимое каталога. Выглядит это примерно так:

" Для получения справки нажмите ? ~
" Сортировка по имени (.bak,~,.o,.h,.info,.swp,.orig в конце списка)~
"= /home/mool/vim/vim6/runtime/doc/ ~
../ ~
check/ ~
Makefile ~
autocmd.txt ~
change.txt ~
eval.txt~ ~
filetype.txt~ ~
help.txt.info ~

Что мы видим?

  1. Комментарий об использовании ? для получения справки о возможностях проводника.
  2. Во второй строке написано, как сортируется список файлов. Сортировку в списке можно осуществлять несколькими способами.
  3. Третья строка указывает на имя текущего каталога.
  4. Ссылка на каталог «../», то есть родительский каталог по отношению к текущему.
  5. Имена каталогов.
  6. Имена обычных файлов.  
  7. Имена редко употребляемых файлов, которые размещаются в самом конце списка (см. комментарий во второй строке).

При включённой подсветке синтаксиса разные компоненты проводника будут подсвечиваться разными цветами.

Для перемещения по проводнику, можно пользоваться командами Обычного режима. Попробуйте переместить курсор на какой-нибудь файл в проводнике и нажать <Enter>. Редактор приступает к редактированию этого файла. Чтобы вернуться в проводник, наберите «:edit .» заново или просто нажмите CTRL-O.

Теперь попробуйте нажать <Enter>, когда курсор помещён над именем каталога. Проводник перемещается в этот каталог и показывает его содержимое. Нажатие <Enter> на каталоге «../» перемещает на один уровень вверх в иерархии файловой системы. Того же эффекта можно достичь при нажатии «-» без необходимости перемещения курсора к позиции «../».

Для получения краткой справки о том, что можно делать в проводнике, нажмите ?. Вы увидите следующий текст:

" <enter> : открыть файл или каталог ~
" o : открыть файл/каталог в новом окне ~
" O : открыть файл в предыдущем окне ~
" p : предварительный просмотр файла ~
" i : отображение даты и размера ~
" s : выбор критерия сортировки ~
" r : обратная сортировка ~
" - : переход на уровень вверх ~
" c : cd в указанный каталог ~
" R : переименовать файл ~
" D : удалить файл ~
" Для получения подробной справки, наберите :help file-explorer ~

В этом сообщении сначала перечислены команды для редактирования файла. В зависимости от введённой команды файл (или каталог) будет открыт в разных частях экрана:

<Enter>Использует текущее окно.
oОткрывает файл в новом окне.
OИспользует предыдущее окно.
pИспользует окно предварительного просмотра и возвращает курсор в окно проводника. |окно_предварительного_просмотра|

Далее следуют команды, определяющие набор информации в самом окне проводника:

iВключает/отключает показ информации о размере и дате файла.
sУказывает на использование текущего поля, в котором находится курсор, в качестве критерия сортировки. Для использования этой особенности надо включить отображение даты и размера с помощью команды i. Затем подведите курсор, например, к размеру любого файла, нажмите s и список будет отсортирован по размеру файлов. Аналогично, нажатие s в тот момент, когда курсор находится на дате файла, вызывает сортировку списка по дате.
rОбратный порядок сортировки.

Кроме того, имеется еще несколько команд:

cСменить текущий каталог на отображаемый в проводнике. Для файлов в текущем каталоге можно использовать команду «:edit» без указания полного пути к файлу.
RИзменить имя файла, находящегося под курсором. Вам потребуется ввести новое имя файла.
DУдалить файл, находящийся под курсором. От вас потребуется ввести подтверждение.

22.2 Текущий каталог

В Vim имеется понятие текущего каталога, точно так же как и в оболочке. Представьте себе, что вы находитесь в своём домашнем каталоге и хотите отредактировать несколько файлов, расположенных в каталоге «ОченьДлинноеИмяКаталога». Для этого вы могли бы вводить следующие команды:

:edit ОченьДлинноеИмяКаталога/file1.txt
:edit ОченьДлинноеИмяКаталога/file2.txt
:edit ОченьДлинноеИмяКаталога/file3.txt

Но можно поступить проще. Попробуйте такой способ:

:cd ОченьДлинноеИмяКаталога
:edit file1.txt
:edit file2.txt
:edit file3.txt

Команда «:cd» изменяет текущий каталог. Для того, чтобы выяснить какой каталог является текущим, используйте команду «:pwd»:

:pwd
/home/Bram/ОченьДлинноеИмяКаталога

Vim запоминает последний использованный каталог. Для возврата в него наберите «cd -«. Пример:

:pwd
/home/Bram/ОченьДлинноеИмяКаталога
:cd /etc
:pwd
/etc
:cd -
:pwd
/home/Bram/ОченьДлинноеИмяКаталога
:cd -
:pwd
/etc
МЕСТНЫЙ ТЕКУЩИЙ КАТАЛОГ ДЛЯ ОКНА

При разделении экрана оба окна будут пользоваться одним и тем же текущим каталогом. Если вам захочется в новом окне редактировать несколько файлов, расположенных где-то ещё, то можно задать текущий каталог только для данного окна, не меняя значения текущего каталога для других окон. Это называется местным текущим каталогом.

:pwd
/home/Bram/ОченьДлинноеИмяКаталога
:split
:lcd /etc
:pwd
/etc
CTRL-W w
:pwd
/home/Bram/ОченьДлинноеИмяКаталога

До того момента, как будет использована команда «:lcd», все окна используют один и тот же текущий каталог. Выполнение команды «:cd» в одном окне также изменяет текущий каталог всех остальных окон.

Окно, в котором была выполнена команда «:lcd» использует собственный текущий каталог, который не будет меняться командами «:cd» и «:lcd», отданными из других окон.

При использовании команды «:cd» в окне, которое использует свой собственный текущий каталог, оно вернётся к использованию текущего каталога, общего для всех остальных окон.


22.3 Поиск файла

Вы пишите программу на C, в которой содержится строка:

#include "inits.h" ~

и хотите посмотреть, что находится в этом файле «inits.h». Подведите курсор к имени файла и введите команду:

gf

Vim найдёт файл и откроет его для редактирования.

А что, если файл находится не в текущем каталоге? Тогда Vim будет использовать опцию ‘path’ для определения пути поиска. Значением этой опции является список каталогов, в которых нужно искать ваши файлы.

Предположим, ваши заголовочные файлы лежат в каталоге «c:/prog/include». Следующая команда позволит добавить этот каталог к опции ‘path’:

:set path+=c:/prog/include

Этот каталог представляет собой абсолютный путь. Независимо от того, где вы находитесь, он всегда будет ссылаться на одно и то же место. А что, если вы храните заголовочные файлы в каталоге внутри каталога с файлами исходных текстов программ? Тогда можно указать относительный путь. Он должен начинаться с точки:

:set path+=./proto

Это подскажет Vim заглянуть в каталог «proto», расположенный в каталоге, содержащем файл, в котором выполняется команда «gf». В указанном выше примере Vim будет искать файл «proto/inits.h» по пути от каталога, в котором находится редактируемый файл.

Указание относительного пути без «./», т.е. просто «proto», означает, что Vim должен вести поиск от текущего каталога, что не всегда может совпадать с каталогом, в котором находится редактируемый файл.

Опция ‘path’ также допускает еще несколько способов для указания пути поиска файлов. Обратитесь к справке по опции ‘path’.

Опция ‘isfname’ используется для определения тех символов, которые могут быть включены в имя файла, и тех, которые не могут (например, в предыдущем примере, символ `»‘).

Если вы знаете имя файла, но оно не встречается в файле, то вы можете набрать его в командной строке:

:find inits.h

Vim и в этом случае будет использовать значение опции ‘path’, чтобы попытаться найти файл. Смысл этой команды такой же, как и у команды «:edit», но принимается во внимание значение опции ‘path’.

Чтобы открыть найденный файл в новом окне, используйте CTRL-W f вместо «gf», или команду «:sfind» вместо «:find».

Существует удобный способ запустить Vim и сразу начать редактировать файл, который находится в одном из каталогов, указанных в значении опции ‘path’:

vim "+find stdio.h"

Такая команда позволяет найти файл «stdio.h» и открыть его для редактирования. Кавычки необходимы, чтобы определить один параметр |-+c|.


22.4 Список буферов

Термин «буфер» в редакторе Vim используется для описания редактируемого файла, или, говоря точнее, копии файла, загруженной в редактор для редактирования. После внесения в буфер требуемых изменений, содержимое буфера записывается в файл. Буферы содержат не только содержимое файла, но также отметки, установки и другие элементы, связанные с редактированием файла.

СКРЫТЫЕ БУФЕРЫ

Предположим, что вы редактируете файл one.txt и хотите перейти к редактированию файла two.txt. Вы могли бы воспользоваться командой «:edit two.txt», но поскольку вы пока не хотите сохранять изменения, сделанные в буфере one.txt, то эта команда не сможет быть выполнена. К счастью, в Vim есть решение и для этой проблемы:

    :hide edit two.txt

Буфер «one.txt» исчезает с экрана, но Vim знает, что вы по прежнему редактируете этот буфер и хранит изменения в памяти. Такой буфер называется скрытым буфером; иными словами буфер существует, но его нельзя видеть.

Аргументом команды «:hide» является другая команды. Команда «:hide» заставляет команду-аргумент считать, что установлена опция ‘hidden’. Опцию ‘hidden’ можно установить и вручную, её смысл в том, что когда вы оставляете буфер для работы над другими файлами, то он не выгружается, а становится скрытым.

Будьте осторожны! Если у вас есть скрытые буферы, то не выходите из Vim, пока не убедитесь, что у вас сохранены изменения во всех необходимых буферах.

НЕАКТИВНЫЕ БУФЕРЫ

Как только буфер был использован хотя бы один раз, Vim запоминает о нём некоторую информацию. Если буфер не является скрытым, но и не показан в окне, то он всё равно остается в списке буферов. Такой буфер называется неактивным. В целом, буферы бывают следующих типов:

АктивныйПоказан в окне, текст загружен
СкрытыйНе показан в окне, текст загружен
НеактивныйНе показан в окне, текст не загружен

Vim помнит о существовании неактивных буферов, сохраняя нечто вроде отметок в своей памяти. Это бывает полезно, потому что вы можете посмотреть, какие файлы редактировали и, возможно, вернуться к работе над некоторыми из них.

СПИСОК БУФЕРОВ

Посмотреть список буферов можно при помощи команды:

:buffers

То же самое можно сделать и с помощью другой команды, которую гораздо быстрее набирать, но её имя не так очевидно передаёт смысл:

:ls

Вывод команды может выглядеть примерно так:

1 #h   "help.txt"               строка 62 ~
2 %l+ "usr_21.txt" строка 1 ~
3 "usr_toc.txt" строка 1 ~

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

После номера следует набор флагов, затем имя файла, и номер строки, на которой в последний раз находился курсор в этом буфере.

Флаги у буфера бывают следующие (слева направо):

uБуфер не входит в список |буфер_вне_списка|.
 %Текущий буфер.
  #Соседний буфер.
   lБуфер загружен и показан.
    hБуфер загружен, но является скрытым.
     =Буфер только для чтения.
      —Буфер неизменяемый, опция ‘modifiable’ выключена.
       +Буфер был изменён.
РЕДАКТИРОВАНИЕ БУФЕРА

Перейти к редактированию буфера можно по номеру. Это помогает избежать набора имени файла:

:buffer 2

Однако, единственный способ узнать номер буфера — это посмотреть список буферов. Вместо этого можно использовать часть имени, например:

:buffer help

Vim попытается найти наиболее удачное соответствие для введённого имени. В том случае, если найдено только одно соответствие, например «help.txt», будет использован этот буфер.

Для открытия буфера в новом окне:

:sbuffer 3

С этой командой также можно использовать имя (или часть имени).

ИСПОЛЬЗОВАНИЕ СПИСКА БУФЕРОВ

Перемещаться по списку буферов можно при помощи следующих команд:

:bnextпереход к следующему буферу
:bpreviousпереход к предыдущему буферу           
:bfirstпереход к первому буферу
:blastпереход к последнему буферу

Чтобы удалить буфер из списка, пользуйтесь командой:

:bdelete 3

Эта команда также работает с именами.

Если вы удаляете активный буфер, то окно, в котором он показан, будет закрыто. Если это было последнее окно, то Vim найдёт другой буфер для редактирования, потому что редактор устроен таким образом, что в нём что-то должно редактироваться.

Замечание: Даже после удаления буфера по команде «:bdelete», Vim продолжает о нём помнить. Говоря точнее, при удалении буфер помещается «вне списка» и не показывается по команде «:buffers». Тем не менее, он будет показан по команде «:buffers!» (с соответствующим флагом). Чтобы заставить Vim забыть о буфере начисто, используйте команду «:bwipe». Обратите также внимание на опцию ‘buflisted’.

 


 

Следующая глава: Редактирование особых типов файлов
Авторские права: см. Авторские права