Показаны сообщения с ярлыком vim. Показать все сообщения
Показаны сообщения с ярлыком vim. Показать все сообщения

пятница, 19 марта 2010 г.

Переводчик для VIM

источник 1: http://www.instanceof.ru/linux/vim/translate
источник 2: http://ru.wikibooks.org/wiki/Vim


Vim при переводах текста, или для чтения английской документации

Итак, чтобы можно было успешно читать и переводить документацию на английском языке, нужно ИМХО всего 3 вещи:
  • Редактор.
  • Переводчик.
  • проверка орфографии
Если их удобно объединить, то можно получить хорошую среду, для перевода/чтения.

Что возьмем

Редактор мы естественно возьмем VIM хотя бы потому что статья так называется. Переводчик mueller консольная версия, работает так:
% mueller sex
sex  [seks] _n. 1> _биол. пол; the weaker sex слАбый пол, жЕнщины; the sterner (или stronger) sex сИльный пол, мужчИны; the sex _шутл.  жЕнщины 2> секс 3> _at
tr. половОй, сексуАльный; sex instinct половОй инстИнкт; sex intergrade гермафродИт  
И орфографмометр: это spell в виме, словари скачаем с vim.org

Как настроим

Мне интересна возможность выпадающего списка, при наведением на неизвестное мне слово мышкой. Для этого, после долгого чтения манов (или гугленья) узнаем что с помошью команды system можно выполнить какое-то действие, вывод которой куда-либо записать. Короче, пишем где-нибудь в ~/.vimrc

function! MyBalloonExpr()
       return system("mueller ". v:beval_text)
endfunction
set bexpr=MyBalloonExpr()
set ballooneval
set balloondelay=100

Определили функцию MyBallonExpr которая будет формировать строку mueller [слово на которое навели] и выполнять. Результат выполнения будет выдавать в «балоне» выпадающем окошке, через 100 миллисекунд.
Естественно вместо mueller вы можите поставить любую другую программу, которая переводит текст.

Для перевода по нажатию клавиши

map   :call TRANSLATE()
function TRANSLATE()
   let  a=getline('.')
   let co=col('.')-1
   let starts=strridx(a," ",co)
   let ends = stridx(a," ",co)
   if ends==-1
       let ends=strlen(a)
   endif
   let res = strpart(a,starts+1,ends-starts)
   let cmds = "sdcv -n " . res
   let out = system(cmds)
   echo out
endfunction

четверг, 25 февраля 2010 г.

Vim Ruby Debugger

http://habrahabr.ru/blogs/ruby/59731/
До недавнего времени я писал Ruby код в Netbeans. Штука клевая и очень удобная, но я давно заглядывался на Vim, уж больно он мощный текстовый редактор, бобам и не снилось. Пытался несколько раз на него перейти, но как только встречался какой-то затык в коде, закрывал Vim, открывал Netbeans, ставил брейкпоинт и начинал разбираться что не так. В общем, привык я к отладчику.

Помучившись некоторое время, пришла идея написать Ruby дебаггер под Vim. Открыл код rails.vim, NERDTree.vim и начал учиться Vimscript'у. Так что спасибо tpope и Marty Grenfell за уроки (хотя наверно они никогда этого не прочтут и не узнают об этом). Плагин можно сейчас лицезреть на гитхабе.


Что умеет плагин


1. Дебажить любые Ruby скрипты, используя ruby-debug-ide гем.
2. Ставить/удалять брейкпоинты, смотреть переменные, путешествовать по коду.
3. Вводить команды вручную. Например, :RdbCommand p Post.all выведет все записи модели Post.

Что потребуется


Для корректной работы плагину надо:
  1. Vim версии >= 7.0, скомпиленный с опциями +signs и +clientserver. Проверить это можно так:

    :echo has("signs") && has("clientserver") && v:version >= 700

    Результат должен быть = 1
  2. Установленный гем ruby-debug-ide
  3. Если вы под Linux'ом, нужен установленный lsof

Установка

  1. Клонируем репо:

    git clone git://github.com/astashov/vim-ruby-debugger.git

  2. Из полученного нам нужна только папка vim, остальное нужно только для разработки. Копируем содержимое vim в ~/.vim/ (или в vimfiles, если вы под Windows).

    В итоге, должно получиться 3 файла:
    • plugin/ruby_debugger.vim — собственно сам плагин
    • doc/ruby_debugger — документация
    • bin/ruby_debugger.rb — промежуточный Ruby скрипт между Vim'ом и ruby-debug-ide гемом. Всё общение между ними происходит через него.

  3. Далее, запускаем Vim и выполяем

    :helptags ~/.vim/doc

    для установки документации по плагину. Почитать её можно по команде

    :help ruby-debugger

Установка завершена!

Использование

  1. Запускаем Vim. Если вы используете gvim, он автоматически запустит Vim сервер, а если vim — надо запускать с опцией servername: vim --servername VIM
  2. Идем, например, в какой-нибудь рельсовый проект.
  3. Запускаем сервер c отладчиком командой

    :Rdebugger

    (по умолчанию он запускает script/server webrick, если надо отладить другой скрипт, можно запустить:

    :Rdebugger foo.rb

  4. Ставим где-нибудь брейкпоинт (по умолчанию командой b, чаще всего это \b).
  5. Открываем страницу с брейкпоинтом в браузере. Vim должен автоматически прыгнуть к линии со сработавшим брейкпоинтом.
  6. Дальше смотрим переменные, путешествуем по коду, в общем — развлекаемся! :)

Команды


По умолчанию (их конечно же можно переопределить в вашем .vimrc) задейстованы такие сокращения:
  • b — поставить брейкпоинт
  • v — открыть/закрыть окно с переменными. Переменные можно открывать/закрывать либо командой 'o' в нормальном режими или левым дабл-кликом
  • m — открыть/закрыть окно с брейкпоинтами. Можно прыгнуть на выбранный брейкпоинт команодй 'o' в нормальном режими или левым дабл-кликом, а также удалить брейкпоинт командой 'd' в нормальном режиме
  • n — перешагнуть (step over)
  • s — войти (step into)
  • c — продолжить (continue)

Как переопределить их вы можете почитать в :help ruby-debugger-details

Если вы встретили баг или придумали новую клевую фичу


То я буду дико признателен за репорт в гитхабовском Issues. Можете также просто написать на anton /сбк/ astashov.net, но репорт в Issues будет лучше. :) Плагин ведет лог почти обо всех своих действиях в файл ~/.vim/tmp/ruby_debugger_log, так что вместе с багом желательно приложить содержимое этого файла.

Я проверял работоспособность в Linux'е и Windows. В Linux'e плагин работает лучше, в Windows я так и не понял как запускать процессы в бэкграунде, поэтому мельтешащие окна с сервером и промежуточным ruby скриптом отвлекают. В MacOs не проверял, потому как у меня её нет.

Graphical Cheat Sheet

http://habrahabr.ru/blogs/vim/28200/
Ну, раз уж пошла такая пьянка, то внесу и я свои пять копеек. Этот графический чит-шит помогает мне и сейчас.

Картинка кликабельна. Можно распечатывать и вешать на стену :)

По ссылке вы можете найти уроки по vi/vim, основанные на подобном графическом предствалении.

Вообще, в своё время, много замечательных советов по vim нашёл здесь.

Ёмкий список команд для VIM на русском

http://freesource.info/wiki/Stat%27i/KratkoOboVsjom/VIM

Оглавление документа
1 Опции командной строки
2 VIM-файлы
3 Структура команд
4 Команды
4.1 Перемещение по тексту
4.2 Прокрутка экрана
4.3 Смена режимов
4.4 Работа с файлами
4.5 Редактирование
4.6 Поиск
4.7 Манипуляции с окнами
4.8 Метки
4.9 Регистры
4.10 Настройки
4.11 Опции
4.12 Команды интеграции
4.13 Группировка текста
4.14 Компиляция/отладка программ
4.15 Другое
4.16 Часто используемые команды (желательно запомнить)
Ссылки

1 Опции командной строки


-t {tag} — Открывает файл с функцией и позиционирует курсор на неё. Должен присутствовать файл tags сформированный командой ctags (ctags -h “.h.cpp” ./*).
+N — При открытии файла позиционирует курсор на строке с номером N.


2 VIM-файлы


{home}/.vimrc — Локальный файл конфигурации VIM.
/usr/share/vim/ — Каталог ресурсных файлов VIM.
vimrc_example.vim — Пример конфигурационного файла.


3 Структура команд


[N][команда][объект][N1][команда перемещения]
где:
N — количество повторений команды;
N1 — количество повторений команды перемещения.


4 Команды


4.1 Перемещение по тексту


h, left — Влево.
l, right — Вправо.
j, down — Вниз.
k, up — Вверх.
0, home — В начало строки.
^ — Первый непустой символ в строке.
$, end — В конец строки.
[N]| — На  столбец.
[N]_ — Вниз на -1 строк и на первый не пустой символ.
[N]% — На  процентов от всего буфера.
[N]G, :[N] — Переход на строку (0G – BOF, $G – EOF).
g — Перемещение по тексту. Объекты:
0, home — на левый край экрана;
^ — на первый непустой символ;
m — на половину ширины экрана;
$, end — на правый край экрана;
k, up — на одну строку экрана вверх;
j, down — на одну строку экрана вниз;
g — на первую строку;
o — на [N] байт в буфере;
e — назад до конца слова;
E — назад до конца слова (от пробела до пробела).

f[simb] — На первый найденный справа от курсора символ [simb].
F[simb] — На первый найденный слева от курсора символ [simb].
t[simb] — Перед первым найденный справа от курсора символ [simb].
T[simb] — Перед первым найденным слева от курсора символом [simb].
; — Повторить последнюю команду F,f,T,t в том же направлении.
, — Повторить последнюю команду F,f,T,t в противоположном направлении.
- — На строку вверх и на первый не пустой символ.
+, Enter — На строку вниз и на первый не пустой символ.
G, ^+End — На последнюю строку.
H — На первую строку экрана.
M — На среднюю строку экрана.
L — На последнюю строку экрана.
w, Sh+Right — На слово вперед.
W, ^+Right — На слово вперед (от пробела до пробела).
e — Вперед до конца слова.
E — Вперед до конца слова (от пробела до пробела).
b, Sh+Left — На слово назад.
B, ^+Left — На слово назад (от пробела до пробела).
( — На предложение назад (до точки).
) — На предложение вперед (до точки).
{ — На абзац назад (до пустой строки).
} — На абзац вперед (до пустой строки).
[[ — Вперед на одну секцию или до { в начале строки.
][ — Вперед на одну секцию или до } в начале строки.
]] — Назад на одну секцию или до { в начале строки.
[] — Назад на одну секцию или до } в начале строки.
^G, :file — Информация о текущем положении курсора в тексте.
^] — Переход по ссылке или на определение функции.
^T — Возврат после перехода по ссылке.
^O — Назад по списку переходов.
^I, Tab — Вперёд по списку переходов.
:ju — Список переходов.

4.2 Прокрутка экрана


^+E — Вниз на одну строку.
^+D — Вниз на scroll строк. если использовать цифру то далее она будет по умолчанию.
^+F, PgDwn — Вниз на одну страницу.
^+Y — Вверх на одну строку.
^+U — Вверх на scroll строк. если использовать цифру то далее она будет по умолчанию.
^+B, PgUp — Вверх на одну страницу.
zEnter — Прокрутка вверх, пока курсор не окажется на первой строке.
zt — Тоже, но курсор остаётся в той-же строке.
z[N]Enter — Изменить размер окна до  строк.
z. — Прокрутка помещающая строку с курсором в центре экрана.
zz — Тоже, но курсор остается в том же столбце.
z- — Прокрутка вниз, пока курсор не окажется в на последней строке.
zb — Тоже, но курсор остаётся в том же столбце.
zl — На один символ влево.
zh — На один символ вправо.
zL — На полуширину экрана влево.
zH — На полуширину экрана вправо.
zs — Помещает курсор на левый край.
ze — Помещает курсор на правый край.

4.3 Смена режимов


Ins, i, a — Переход в режим вставки.
v — Визуальный строчный режим (с точностью до символа).
V — Визуальный строчный режим (с точностью до строки).
^V — Визуальный блочный режим.
gv — Возврат к области, выделенной в прошлый раз.
: — Командный режим.
r — Переход в режим замены.
gR — Переход в виртуальный режим замены.
ESC — Возврат в нормальный режим.

4.4 Работа с файлами


:q — Выход (если не требует сохранения).
:q! — Закрыть окно без сохранения.
:qa! — Выход из всех открытых файлов без сохранения.
:x — Выход из всех открытых файлов без сохранения.
:wqa — Выход из всех файлов с сохранением.
:w — Запись в файл.
:w! — Запись в файл даже если он только для чтения.
:wq[!] — Сохранить и выйти.
ZZ — Сохранить и выйти.
:r — Загрузить файл в позицию курсора.
:e [++opt] [+cmd] [] — Открыть новый файл заместив старый (без имени файла – перечитывает текущий).
Доступные опции [++opt]:
enc — перекодировка (++enc=cp866);
ff — формат файла (++ff=unix).

Доступные команды [+cmd]:
+ — начать с конца файла;
+ — начать с указанной строки;
+/ — начать с первой строки в которой встречается шаблон .

:e! [++opt] [+cmd] [] — Открыть новый файл заместив старый и игнорируя все изменения (без имени файла – перечитывает текущий).
:e #[count] — Открыть файл под номером из :files.
:sp — Открыть в новом окне.
gf, [f — Редактировать файл под курсором.


4.5 Редактирование


x, del — Удаление символа под курсором.
X — Удаление символа перед курсором.
u, :u — Откат.
U — Отменить все изменения, повлиявшие на текущую строку.
[reg]^R, :red — Накат, вставка из регистра.
С — Удалить от курсора и до конца строки с переходом в режим ввода.
c — Изменение, удаление и ввод нового.
l — символ, аналог s;
c — строку, аналог S;
[N]o — удаление по команде перемещения “o” [N] раз.

D — Удалить от текущего символа до конца строки.
[reg]d — Вырезать часть строки в регистр [reg]. Объекты:
l — аналог x;
h — аналог X;
d — текущей строки;
w — до конца слова;
$ — до конца строки;
[N]o — удаление по команде перемещения “o” [N] раз.

o, O — Вставка новой строки до и после текущей, с переходом в режим вставки.
J — Объединить строку с последующей.
r[симв] — Заменить символ под курсором на [симв].
gr[симв] — Заменить виртуальный символ под курсором на [симв].
gJ — Тоже, но не вставляя новых пробелов.
[reg]y[com] — Копирование в регистр [reg(«a)] строк через которые перенесет команда [com].
[reg]yy, Y — Копирование в регистр [reg(«a)] текущую строку.
[reg]p — Вставка текста из регистра [reg(«a)] после курсора.
P, MidMouse — Вставка текста из регистра перед курсором.
gp — Тоже что и p, но курсор помещается в конец вставленного текста.
gP — Тоже что и P, но курсор в конец вставленного текста.
]p — Тоже что и p, но дополнительно изменяется отступ вставляемого текста, аналогично отступу текущей строки.
]P — Тоже что и P, но дополнительно изменяется отступ вставляемого текста, аналогично отступу текущей строки.
. — Повторение предыдущей команды изменившей буфер.
g~, ~ [com] — Изменение регистра букв на участке текста, через который перенесёт команда [com].
g~ ~ — Изменение регистра букв в текущей строке.
gu[com] — Превращение букв в строчные на участке текста переноса команды [com].
guu — Превращение в строчные буквы в текущей строке.
gU — Превращение букв в прописные.
gUU — Превращение в прописные буквы в текущей строке.
//g?[com] — Перекодировка по алгоритму rot13 на участке текста переноса команды [com].
g?? — Перекодировка по алгоритму rot13 в текущей строке.
[N]^A — Добавить число к числу в позиции курсора.
[N]^X — Вычесть число от числа в позиции курсора.
! — Обработка внешней программой.
= — Расстановка отступов для языка программирования С.
<[com] — Сдвиг влево на значение (shiftwidth) строк, через которые перенесла бы команда[com].
<< — Сдвиг влево текущей строки.
>[com] — Сдвиг вправо на значение (shiftwidth) строк, через которые перенесла бы команда[com].
>> — Сдвиг вправо текущей строки.

4.6 Поиск


/{str}[/[off]] — Переход вперёд на смещение искомой строки .
?{str}[?[off]] — Переход назад на смещение искомой строки .
/ — Повторить последний поиск в прямом направлении.
? — Повторить последний поиск в обратном направлении.
n — Повторить последний поиск.
N — Повторить последний поиск в обратном направлении.
* — Поиск в прямом направлении идентификатора под курсором.
# — Поиск в обратном направлении идентификатора под курсором.
gd — Перейти к локальному определению переменной под курсором.
gD — Перейти к глобальному определению переменной под курсором.
:/[search] — Поиск в прямом порядке.
:?[search] — Поиск в обратном порядке.
:[address]s/[search]/[repl]/[gci] — Поиск [search] и замена на [repl] (в режиме VISUAL – без адреса и в выделенной области)
[gci]:
< > — первого вхождения;
— всё;
— с запросом подтверждения;
— игнорируя регистр.

[address]:
<%> — весь текст;
<1> — первая строка;
<.> — текущая строка;
<$> — последняя строка;
<1,3> — между строками 1–3;
<.,$> — от текущей до последней.

4.7 Манипуляции с окнами


^W — Операции с окнами:
i, d, f — новое окно с i-переменой, d-определением, f-файлом под курсором;
n — открыть новое окно;
s — сдублировать еще одно окно от текущего (горизонтально);
v — сдублировать еще одно окно от текущего (вертикально);
с, q — закрыть текущее окно;
o — закрыть все остальные окна;
r — сдвиг вверх;
R — сдвиг вниз;
x — сдвиг на другое окно с активизацией другого окна;
K — переместить текущее окно вверх;
J — переместить текущее окно вниз;
H — переместить текущее окно влево;
L — переместить текущее окно вправо;
k, Up — активизировать окно сверху;
j, Down — активизировать окно снизу;
h, Left — активизировать окно слева;
l, Right — активизировать окно справа;
w — активизировать следующее окно;
p — активизировать предыдущее окно;
+ — увеличить высоту окна на одну строку;
- — уменьшить высоту окна на одну строку;
> — увеличить ширину окна на один символ;
< — уменьшить ширину окна на один символ;
= — сравнять размеры окон;
_ — установить максимальную высоту окна;
1_ — установить минимальную высоту окна;
| — установить максимальную ширину окна;
1| — установить минимальную ширину окна.

:sp — Разделить окно по горизонтали.
:vs — Разделить окно по вертикали.
:new — Создать новое окно (горизонтальное разделение).
:vne — Создать новое окно (вертикальное разделение).

4.8 Метки


m[M] — Установить метку в позицию курсора.
m», m' — Установить метку предыдущего контекста.
:[N]ma, [N]k M — Установить метку на строке .
'M — Перемещение в начало строки с меткой .
`M — Перемещение на метку .
'[ — Первый непустой символ в первой строке части текста, над которой производилась последняя операция.
"[ — Первый символ части текста, над которой производилась последняя операция.
'] — Первый непустой символ в последней строке части текста, над которой производилась последняя операция.
"] — Последний символ части текста, над которой производилась последняя операция.
:marks — Показать список меток.
:marks ABC.. — Показать метки ABC.. .
% — Переход на противоположную скобку: ()[].... .
[( — Переход к предыдущей незакрытой ( .
[{ — Переход к предыдущей незакрытой { .
[) — Переход к следующей не открытой ( .
[} — Переход к следующей не открытой } .
]m — Переход к следующему началу метода (Java).
]M — Переход к следующему концу метода (Java).
[m — Переход к предыдущему началу метода (Java).
[M — Переход к предыдущему концу метода (Java).
[# — Переход на предыдущий незакрытый #if или #else.
]# — Переход на следующий неоткрытый #else или #endif.
[*, [/ — Переход на предыдущее начало С-комментария /*.
]*, ] / — Переход на следующий конец С-комментария */.

4.9 Регистры


"" — Безымянный регистр (используется по умолчанию).
«0 — Содержит текст прочитанный последней командой 'y'.
“1-»9 — Сдвиговые регистры удалённого и изменённого текста.
«- — Заполняется при удаление текста, занимающего менее одной строки.
“a-»z — Именованные регистры, заполняются только при указании их специально.
«. — Последний вставленный текст.
"% — Содержит имя редактируемого файла.
"# — Содержит имя альтернативного файла.
«: — Последняя команда в режиме ':'.
"= — Ввод выражений.
"* — Хранит в себе выбранный мышью текст (X-Window).
«/ — Регистр последнего поиска.
:reg [reg] — Печать содержимого регистров.
q[reg] — Ввод регистра [reg] до нажатия q.
@[reg] — Выполнения команд в регистре [reg].

4.10 Настройки


:set — Работа с опциями (без имени опции показывает установленные опции).
all — показать все опции;
termcap — показать только терминальные опции;
— активирует опцию если она логическая;
! — инвертирует опцию;
& — устанавливает стандартное значение опции;
no — деактивирует опцию;
= — установка значения опции в ;
? — показать значение опции.

:options — Установка различных опций.

4.11 Опции


ai — При начале новой строки отступ копируется из предыдущей.
aw — Сохраняет содержимое файла, если он был изменен перед выполнением некоторых команд.
bk — Создаёт резервную копию файла при перезаписи.
bkc — Определяет метод создание резервной копии:
— Копирует существующий файл и перезаписывает старый;
— Переименовывает существующий файл и создает новый;
— Выбирает наиболее оптимальный вариант.

bin — Редактирование файла в бинарном режиме.
dict — Список файлов с словарями автозавершения ключевых слов (разделяются запятыми, переключение Ctrl-X + Ctrl-K).
dy — Изменяет способ отображение текста.
ef — Имя файла с ошибками в режиме быстрой отладки.
efm — Описание формата строки файла с ошибками, записанное в стиле scanf.
fenc= — Перекодировать файл в кодировку (set fenc=koi8-r).
ff= — Изменить формат файла на  (dos,unix,mac).
fcl — Если равно “all”, то группировка автоматически закрываются, при выходе курсора за её пределы.
fdm — Определяет метод группировки для текущего окна.
ic — Игнорировать регистр при поиске.
mef — Имя файла ошибок, возникших при выполнении команды :make .
mouse=a — Включить мышь в X или GUI.
mp — Программа, используемая при выполнении команды :make .
ml — Включает непосредственное включение строки конфигурации в редактируемый файл.
number — Показывать номера строк.
scrollbind — Установить совместную прокрутку содержимого окон.
sbr — Символы, которыми обозначаются автоматически перенесённые строки.
sm — Если установлено, то при вводе закрывающей скобки происходит быстрая подсветка соответствующей ей открывающей скобки.
sw — Число пробелов используемых при автоотступе.
ts — Размер табуляции.
tw — Максимальное число символов, которые могут быть введены в одну строку.
tsr — Список файлов, по которым осуществляется поиск словарных статей (+X + +T).
ul — Максимальное число изменений, которые могут быть отменены.
ve — Включает автоматическое заполнение пробелами/табуляторами при навигации по тексту.
vb — Заменить звуковой сигнал визуальным.
wrap — Заворачивание строк длиннее ширины экрана.
wb — При перезаписи файла, создается его временная копия.

4.12 Команды интеграции


:help com — Получение помощи по команде . Префиксы команд:
<ничего> — нормальная команда;
v_ — визуальная команда;
i_ — вставочная команда;
: — команда командной строки;
с_ — редактирование командной строки;
- — командные аргументы.

:! com — Запускает в оболочке команду .
:!! — Повторяет предыдущую команду :! .
:r! com — Вставить в позицию курсора «выхлоп» команды .
:r file — Вставляет в текст содержимое файла .

4.13 Группировка текста


:mkview — Создание/сохранение группировок файла.
:loadview — Загрузка группировок файла.
zf — Создать группировку выделенного участка (маркер группировки).
zfap — Создать группировку параграфа (маркер группировки).
zd — Удалить группировку.
zE — Удалить все группировки.
zo — Открыть текущую группировку.
zO — Открыть текущую группировку рекурсивно.
zr — Открыть все группировки.
zc — Скрыть/закрыть текущую группировку.
— Скрыть/закрыть текущую группировку рекурсивно.
zM — Скрыть/закрыть все группировки.

4.14 Компиляция/отладка программ


:make — Вызов команды make (сборка проекта).
:cc[numb] — Отображение ошибки с указанным номером.
:cn — Перейти к следующей ошибке.
:cp — Перейти к предыдущей ошибке.
:cr — Перейти к первой ошибке.
:cla — Перейти к последней ошибке.
:cq — Выйти из программы с возвратом кода ошибки.
:cf [file] — Загрузить указанный файл в качестве файла ошибок.
:cl — Отобразить все ошибки.
:copen — Открыть окно со списком ошибок.
:cclose — Закрыть окно со списком ошибок.
:cscope?

4.15 Другое


^p, ^n — Дополнение слова используя в качестве словаря весь текст или дополнительные источники (include файлы).
Sh+K — Вызов man по команде под курсором.
[i — Показать определение (included) переменной, функций ... .
[d — Показать определение (defined) МАКРО.
ga — Информация о символе под курсором.
g ~ [com] — Изменение регистра букв на участке текста, через который перенесет команда [com].
:ls — Список буферов.
:badd [file] — Добавить файл в буфер.
:bdelete [N] — Выгрузить буфер.
:buffer [N] — Перейти к буферу [N].
:print — Распечатать.
:iabbrev — Описание аббревиатур (:iabbrev L$ Linux).

4.16 Часто используемые команды (желательно запомнить)


[N]G — Переход на строку , 0G – BOF, $G – EOF.
% — Переходит на противоположную скобку: ()[].... .
^] — Переход по ссылке или на определение функции.
^T — Возврат после перехода по ссылке.
^O — Назад по списку переходов.
^I — Вперёд по списку переходов.
u, :u — Откат.
U — Отменить все изменения, повлиявшие на текущую строку.
^R,:red — Накат.
. — Повторение предыдущей команды изменившей буфер.
m[M] — Установить метку в текущую позицию.
'M — Перемещение в начало строки с меткой .
`M — Перемещение на метку .
:copen — Показать окно ошибок (после вызова команды типа make).
^p, ^n — Дополнение слова используя в качестве словаря весь текст или дополнительные источники (include файлы).
[i — Показать определение переменной, функций ... .

Ссылки

Использование Vim для редактирования простого текста

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

Конкретно для меня стимулом явилась возникшая сложность при работе с переводами. Проблема заключалась в следующем: несмотря на разрешение экрана в 1920х1200 сделать так, чтобы оба текста располагались перед глазами, было практически невозможно. Да и дергаться мышью туда-сюда, управляясь с полосами прокрутки, запоминая положения текстовых фрагментов, довольно таки неудобно. Консольный текстовый редактор, управление которым осуществляется клавиатурой, представлялся для меня логичным решением. Оставалось только разобраться в нем и из огромного массива информации выбрать только то, что нужно.

Забегая вперед, скажу, что информацию пришлось собирать фактически по крупицам. Основное направление в использовании Vim в качестве редактора «для программистов» привело к тому, что вопросам обработки «простого» текста уделяется мало внимания. В конце-концов, с поставленной задачей, как мне кажется, удалось справиться.



Первоначальные сведения о работе редактора.



Про командный режим, режим вставки, навигации по тексту и т.п., написано более чем достаточно. Однако все это можно свести к одной команде — vimtutuor. Это, как понятно из названия, обучалка базовым принципам Vim. Если вашим дистрибутивом является Ubuntu, то сперва необходимо установить полную версию редактора:

sudo apt-get install vim-full

Единственным значимым, на мой взгляд, аспектом, который не охватывает туториал — является работа в визуальном режиме. Но здесь все просто: В командном режиме нажимаем клавишу «v», выделяем необходимый кусок текста, после чего выполняем с ним необходимую операцию: будь то форматирование, удаление или копирование.

Наиболее важным вопросом, на который следует ответить перед использованием Vim для обработки текста — это перенос набранного текста по строкам. По умолчанию редактор будет писать текст одной длинной строкой, границей которой будет нажатие клавиши Enter.
Это хорошо для редактирования исходного кода, но совершенно неприемлемо для написания текста. Решения здесь два. Использовать команду

:set wrap

Это заставит редактор переходить на другую строку при достижении края окна терминала, но при переходе не будет установлен символ конца строки. Таким образом, все, что мы наберем до нажатия Enter, будет являться одной длинной строкой. Это не очень удобно, поскольку навигация по строкам является довольно важным аспектом редактирования. Решением в данной ситуации будет использовании команды

:set tw=80

Она установит длину строки в 80 символов, что, на мой взгляд, является оптимальным.
При достижении указанного значения, редактор перейдет на другую строку, поставив символ окончания строки.

Форматирование текста


Следующим вопросом, на который необходимо было найти ответ — как осуществлять форматирование текста. Для этого пригодятся следующие команды:

:ce - выравнивает строку по центру
:ri - выравнивает строку по правому краю
:le - выравнивает строку по левому краю


Но как выровнять текст, что называется, «по параграфам»? Чтобы левый и правый край были ровными. Помощь Vim говорит, что для этого нужно использовать внешнюю программу. Но есть и другое решение. Подключаем макрос (идет в стандартной поставке):

:source $VIMRUNTIME/macros/justify.vim

После этого командой "_j" в режиме редактирования можно выровнять выделенный текст «по параграфам».
Несмотря на то, что мы задали фиксированную ширину, при редактировании текста может получиться ситуация, когда одна строка окажется длиннее, или, напротив, короче. Это вполне логично — поскольку строка заканчивается символом переноса строки, который может быть затерт или смещен влево. Привести абзац к фиксированной ширине можно выделив текстовый блок в визуальном режиме и воспользоваться командой «gq».

Проверка орфографии.


Неотъемлемой функцией текстового редактора для меня является проверка орфографии. В Vim этот вопрос решается так:
Качаем архивы со словарями. Разархивируем их в папку /tmp/dict (без подкаталогов внутри).
Создаем папку
mkdir -p ~/.vim/spell/
Далее формируем словарь в Vim-формате командой:
:mkspell! ~/.vim/spell/ru /tmp/dict/ru_RU — для русского языка
:mkspell! ~/.vim/spell/en /tmp/dict/en_US — для английского

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

:setlocal spell spelllang=ru_ru,en_us

Работа с несколькими документами.


Для открытия нового окна используем команды:

:new — создает новый документ в новом окне

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

:Sex

Откроется подобие файлового менеджера, в котором можно выбрать требуемый для редактирования файл. Перемещение из окна в окно осуществляется следующим образом: Наживаем CTRL-w, а затем стрелкой курсора переходим к нужному окну. Вместо курсора можно воспользоваться навигационными клавишами — h,j,k,l
После того, как все требуемые документы открыты в одном окне, необходимо расставить их по местам, выбрав требуемый размер. Это делается так:
CTRL-w, а затем навигационная клавиша, только с зажатым шифтом -H,J,K,L соответственно.

Разложив окна, можно подогнать их размер под конкретные нужды можно так:
CTRL-W +
CTRL-W —
изменяют размер окна по вертикали;
CTRL-W <
CTRL-W >
изменяет размер окна по горизонтали.

В качестве резюме.



Если изложенное выше оказалось для вас полезным, а Vim оказался пригодным для написания и редактирования текстов, самое время перейти к составлению своего конфигурационного файла. Для этого Открываем в своем домашнем каталоге файл vimrc — и вписываем туда команды, которые сочли полезными для каждодневного использования. У меня это ширина текста, проверка орфографии и использование макросадля выравнивания текста «по параграфам».
Кроме того, в случае если используется юникод, настоятельно рекомендую ознакомиться с материалами на ru.wikibooks.org/wiki/Vim и прописать в конфигурационный файл переназначение символов. Потому как постоянное переключение русской-английской раскладки в командном режиме реально утомляет.

p.s. Сперва я хотел разместить этот топик в блоге, посвященному Vim. Нопотом решил, что его читатели уже знакомы с текстовым редактором и столь начальная информация будет не интересна. А вот для новичков в мире *nix, слышавших про «войны» текстовых редакторов, материал будет познавательным и позволит более быстро начать использовать редактор для повседневных нужд.

VIM как Rails IDE в стиле TexMate благодаря набору скриптов от Akita

http://habrahabr.ru/blogs/ruby/68013/
В далекие времена, когда я ещё писал на c\c++, я пользовался замечательным редактором VIM, знал минимальный набор vim-фишек, и был в целом доволен его работой. Несколько позже я стал изучать Rails и программировать на Ruby. Я достаточно быстро понял, что базовой поставкой VIM не обойтись, попробовал пару найденных в интернете руководств по доведению VIM до уровня полноценной IDE, наткнулся на подводные камни, и быстро сдался. В тот момент мне хотелось изучать в первую очередь именно Rails, а не VIM.
Немного помытарился с разными другими редакторами и IDE типа Aptana, Geany, Eclipse и т.п. пока не наткнулся на полностью, на тот момент, удовлетворящий меня Netbeans. О Netbeans можно писать, да и написано, немало хорошего. Как IDE для разработки на Ruby Netbeans просто прекрасен. Я и сейчас использую его в случае, если работаю в Windows. Но однажды я оказался на длительное время не за своим, а за чужим ноутбуком, на котором уже стоял VIM, в месте, где интернет-трафик был сильно ограничен. А Таксовик требовал срочной доработки. Выкачивать ~60мб Netbeans и ещё n-ное количество мб на плагины было не этично, я и снова начал освоение VIM. И к моей радости довольно-таки быстро наткнулся на набор скриптов от бразильца Akita on Rails и скринкаст в придачу. Он, как я понял, собрал кучу полезных плагинов вместе и чуть-чуть дописал конфиг. Всё, о чём будет говориться ниже верно не только для Ruby, но и для других языков типа C, PHP и прочее, готовые наборы сниппетов (о них далее) в комплекте есть и для них.


Основные фишки этого набора скриптов


  1. FuzzyFinderTexMate — очень удобный поиск файлов в проекте по ctrl+f. К примеру, чтобы найти файл config\routes.rb надо набрать rorb. Или даже и того меньше :)
  2. Набор сниппетов из TexMate и некоторое количество своих (в смысле, NERDSnippets). Очень удобно, набираешь vf + TAB — получаешь validates_format_of :<+attribute+>, :with => /<+regex+>/<+, :on => :<+create+>, :message => "<+is invalid+>"+>, где по TAB скачешь между параметрами, заключёнными в <+...+>. Сниппеты есть для всего, чего угодно, их полный список можно посмотреть в папке snippets в директории с файлами кофигурации VIM.
  3. Дерево проекта, реализованное с помощью NERDTree. Доступно по \+p (обратный слеш и символ p). Переключение с дерева проекта в окно редактирования кода и обратно осуществляется по ctrl+w и стрелка (куда будет стрелка, туда курсор и перескочет), в самом же дереве o — открыть\закрыть папку\файл, R (shift+r) — обновить дерево и по вопросу(?) довольно внятная справка по горячим клавишам.
  4. Подсветка кода (rb, html, rjs, js, erb и т.п.)
  5. Возможности из rails.vim типа перехода по gf на файл модели, если курсор стоит на вызове, например, конструктора. Всяческие :Rake, :Rgenerate и т.п.
  6. Ну и все возможности и навороты VIM, за которые его так любят :)


А вот и скринкаст от автора на эту тему (рекомендую к просмотру):


Надеюсь, вы уже потираете руки, потому что vim — это очень быстрый, удобный, расширяемый и очень не требовательный к ресурсам компьютера редактор.

Добиться всего этого очень просто. Вышеупомянутый Akita собрал всё это в одном проекте на github.

Установка


Linux и Mac:

cd ~
git clone git://github.com/akitaonrails/vimfiles.git .vim
cd .vim
git submodule init
git submodule update


Если же у вас Windows, то в первую очередь надо установить Exuberant CTags и msysGit, после чего проделать следующее:

cd %HOME%
git clone git://github.com/akitaonrails/vimfiles.git
cd vimfiles
git submodule init
git submodule update


Далее, вы открываете ваш ~/.vimrc (на Windows %HOME%\_vimrc), и вставляете туда следующие строки:

source ~/.vim/vimrc "Собственно, подцепить все настройки от Akita
"В Windows вместо строчки выше надо вбить %HOME%\vimfiles\vimrc
colorscheme vibrantink "Приятная цветовая схема в стиле TexMate
set nu "Отображать номер астрок
set sw=2 "Заменяет TAB на 2 пробела
set sts=2 "Аналогично, но в случае автоотступа
let g:fuzzy_ignore = "gems/*"


Послесловие



Собственно, я очень доволен работой этих скриптов и VIM, и теперь на своём основном linux-ноутбуке пересел с Netbeans на VIM. Основные аргументы — удобство в работе (впрочем, оно сравнимо), скорость работы, отсутвие необходимости работать мышью (хотя VIM поддерживает мышь) и скорость загрузки (холодный старт Netbeans — секунд 30).
Не обошлось, конечно, и без небольших подводных камней. Чтобы работала вся эта красота нужен VIM собранный с поддержкой Ruby. Там, где я изначально настраивал это окружение, была установлена Mandriva 2010 и почему-то даже в самом расширенном vim-enhanced такой поддержки не было. Впрочем, многое работало и без неё (но не работал, например, FuzzyFinderTexMate). Проверяется это легко:
vim --version | grep ruby
или, если нет grep, то просто vim --version и поискать +ruby (собран с поддержкой) или -ruby (собран без поддержки).

На всякий случай скажу, что в TexMate я никогда не работал :)

Немного ссылок


Сам блог Akita on Rails
Пост про VIM + RAILS + IDE: часть 1, часть 2
То же, но под Windows

Обновление №2

Как правильно подсказывают в комментариях: статья на хабре о дебаге Ruby-приложений в VIM

Обновление:

Ярлыки