scripting в vim

и другие vi-подобные редакторы

Модератор: /dev/random

Ответить
Goner
Сообщения: 153

scripting в vim

Сообщение Goner »

Задача: обработать строку в открытом файле с помощью скрипта.
Я так понимаю, что нужно
1 строчку забрать в буфер (yy),
2 обработать содержимое,
3 вставить обратно.

Есть предложения по поводу второго шага?
Спасибо сказали:
Goner
Сообщения: 153

Re: scripting в vim

Сообщение Goner »

Нашел, как вытащить строку из буфера.

The getline() function obtains a line from the current buffer.

Остальное, будем думать.

Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: scripting в vim

Сообщение sash-kan »

http://vim.wikia.com/wiki/Best_Vim_Tips#Ge..._shell_commands

в частности:
Goner писал(а):
19.05.2010 19:40
обработать строку в открытом файле с помощью скрипта

Код: Выделить всё

:.!sed 's/^/#/'
извращённая подстановка # в начало текущей строки.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Goner
Сообщения: 153

Re: scripting в vim

Сообщение Goner »

sash-kan писал(а):
19.05.2010 23:25
извращённая подстановка # в начало текущей строки.


Спасибо, хоть я и не совсем это имел в виду.
Оказывается можно писать скрипты и сорсить их (не совсем понял, что это означает, но работает). Я пишу в файл скрипт, определяю функцию на специальном скриптовом языке vim (туда можно впихнуть секцию на python). Потом делаем :so[urce] name.vim и можно пользоваться функцией:
:call Function_name()
Из питона доступ к буферу текущего окна получаем так:
python << EOL
import vim
lines = vim.current.buffer
lines[1] = 'hello world' # заменяет первую строчку в файле
EOL

Очень это все забавно. :)
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: scripting в vim

Сообщение sash-kan »

Goner писал(а):
19.05.2010 23:39
:call Function_name()
можно и без «call ».
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
VoidExp
Сообщения: 208
Статус: Lead guitar adept
ОС: Ubuntu

Re: scripting в vim

Сообщение VoidExp »

А как получить доступ в скриптах к выделенному на момент вызова функции тексту? :)
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: scripting в vim

Сообщение ZyX »

VoidExp писал(а):
22.06.2010 11:58
А как получить доступ в скриптах к выделенному на момент вызова функции тексту? :)

Можно использовать line("'<"), line("'>") и соответствующие [virt]col('...'), а затем getline и strpart, можно сделать так:

    let savedureg=@"
    normal! gvy
    let selectedtext=@"
    let @"=savedureg

Спасибо сказали:
Ответить