Загрузка...
Linux
Новости, статьи, обсуждения, - все что связано с GNU Linux, FreeBSD, OpenBSD, Sun Solaris, Mac OS X и другими системами. Если вы интересуетесь данной темой - добро пожаловать в сообщество.
     

Несколько тонкостей Vim

31.10.10, 09:19
Автор ggg

Вчера на конференции Rails разработчиков, которую проводили RailsClub и компания undev.ru, были озвучены несколько интересных вопросов про Vim. Зная ответы на эти вопросы использование редактора становится гораздо удобнее.

 

Вопрос 1: не работает прокрутка/выделение мышкой в консольном редакторе Vim на удаленной машине, что делать?

Ответ: в конфигурационный файл .vimrc необходимо добавить строку

set mouse=a

после чего мышь будет работать так, как это нужно. Макс Лапшин интересовался, будет ли это работать на удаленной машине через ssh, но без проброса иксов и прочих ухищрений. Сегодня специально проверил - работает, даже в screen-е.

 

Вопрос 2: у Vim-а достаточно специфичный алгоритм работы с copy/paste: скопированные в буффер строки доступны только внутри Vim-а, а внешние приложения их не видят. Можно ли сделать так, чтобы работа с буффером обмена была более привычной?

Ответ: да можно, в Vim-е чтобы скопировать текст в глобальный буффер обмена необходимо выделить его (через режим выделения, так называемый Visual Mode) и нажать следующее сочетание клавиш: "+y (по очереди нажимаем клавиши ", +, y). К сожалению такой способ работает только на локальной машине, т.е. с удаленной машины в буфер у меня ничего не скопировалось. Если есть идеи как сделать копирование с удаленной машины - отписываемся в комментариях (я особо не искал решение т.к. есть ответ на следующий вопрос). Чтобы вставить данные из глобального буфера обмена используется комбинация клавиш "+p (по очереди нажимаем клавиши ", +, p).

 

Вопрос 3: для того, чтобы сохранять настройки редактора на удаленном сервере всегда необходимо таскать с собой конфиги (копировать ~/.vimrc и ~/.vim на удаленный сервер). Можно ли редактировать файлы в Vim-е удаленно, чтобы использовались конфиги с локальной машины?

Ответ: да можно, Vim позволяет легко и непринужденно редактировать файлы с удаленной машины. Рассмотрим 2 наиболее часто встречающихся примера соответственно для ftp и ssh:

  1. vim ftp://user@machine/path/to/document
  2. vim scp://user@machine/path/to/document

При таком подходе на удаленный сервер будет делаться всего 2 запроса: один на чтение файла при загрузке, а второй - на запись файла при сохранении, поэтому нагрузка на сеть гораздо меньше, чем при редактировании файла в редакторе запущенном через ssh. Если не хочется каждый раз вводить пароль при соединении с сервером - в случае ssh подойдет авторизация по ключам, а при использовании ftp - логины и пароли можно хранить в файле .netrc

Если же вам все таки удобнее редактировать файлы в своем привычном редакторе (TextMate, Gedit и т.п.), но данный редактор не установлен на удаленном сервере, а вы ну очень сильно чувствуете что Vim не для вас, то стоит посмотреть в сторону sshfs (есть версия как для Linux, так и для MacOS X) - данная утилита позволяет монтировать удаленную директорию в указанную папку, при этом на сервере ничего устанавливать не надо. Таким образом мы общаемся с файлами удаленного сервера как с локальными, а следовательно можем использовать те программы и настройки к ним, что имеются на локальной машине.

 

Вопрос 4: Vim достаточно сложный для новичков, можно ли сделать его более привычным неподготовленному пользователю?

Ответ: да, можно. Вопрос достаточно актуален, потому что разработчик зачастую не может позволить себе 1 - 2 неделю не работать, а разбираться с редактором. Но в то же время очень хочется использовать те фишки, которые предоставляет Vim. В этом случае вам поможет проект Cream (подробности читаем по ссылке http://linux.vsevteme.ru/2010/05/08/blog/cream-sdelaem-vim-prosche)

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

Комментарии

Когда не работает простое выделение для копирования в буфер в Vim-e я всегда пользуюсь выделение с нажатой клавишей Shift, как для локального, так и для удаленного Vim-a

этот способ тоже возможен, но и он не лишен недостатков: во первых выделить что-то больше экрана не получится, а во вторых, если включена нумерация строк и выделяется более чем одна строка – то нумерацию строк придется временно отключить, чтобы выделение отработало корректно

в gvim есть кнопочка “скопировать в буфер обмена” – пользуюсь ей.

С удаленной машины у меня нормально в буфер перетаскивается, но я сталкиваюсь с непонятной другой проблемой – не всегда это происходит (и не только с vim).
Заметил закономерность, что если в буфере рабочей машины уже есть что-то, то удаленная машина в буфер не пишет (хотя это тоже не всегда так :)

чего-то не вышла у меня магия с юзанием мыши по ssh:
$ sudo vim /etc/postgresql/8.4/main/pg_hba.conf
Error detected while processing /home/bla-bla-bla/.vimrc:
line 1:
E538: No mouse support: mouse=a
Press ENTER or type command to continue

Как так вышло, уважаемый автор?

а vim точно скомпилирован с поддержкой мыши?

p.s. vim —version

Опа! Слона-то я и не заметил!
-mouse -mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse -mouse_xterm

Гм. А как поправить это дело в случае убунты? Только сборкой из исходников, или .deb какой-никакой имеется?

раньше был пакет vim-full, сейчас его заменяет пакет vim, т.е. sudo apt-get install vim должен спасти отца русской демократии

спасибо тебе, добрый человек!

Всё прошло удачно :)

ну и ладушки =)

Войдите, чтобы оставить комментарий