визуально отделить первые 80 символов каждой строки

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

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

Ответить
Аватара пользователя
KonishchevDmitry
Сообщения: 92
ОС: Ubuntu
Контактная информация:

визуально отделить первые 80 символов каждой строки

Сообщение KonishchevDmitry »

Подскажите, можно ли сделать так, чтобы Vim рисовал вертикальную линию на всю высоту экрана (или что-то вроде того), к примеру, после 80 символа, которая служила бы напоминанием, что если текст выходит за эту линию, предпочтительнее перенести его часть на новую строку?
Спасибо сказали:
Аватара пользователя
drag0n
Сообщения: 156
Статус: Дракон-линуксоид
ОС: Slackware Linux
Контактная информация:

Re: визуально отделить первые 80 символов каждой строки

Сообщение drag0n »

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

" Add info about filename and date of creation
map <F3> :exe "normal! o//File: ".bufname("%")<CR>:exe "read !LC_TIME='us' date +\"//Created: \\%d \\%b, \\%Y\""<CR>:exe "normal! oAuthor: h0rr0rr_drag0n "<CR>:exe "normal! oDescription: "<CR>

Вот, сделал как и хотел. Подставляет так:
//File: test.cpp
//Created: 02 May, 2008
//Author: h0rr0rr_drag0n
//Description:
После каталога /etc понимаешь, что реестр - место, откуда нормальными не возвращаются.
Спасибо сказали:
Аватара пользователя
nonstop
Сообщения: 132
ОС: Slackware

Re: визуально отделить первые 80 символов каждой строки

Сообщение nonstop »

KonishchevDmitry писал(а):
01.05.2008 18:11
Подскажите, можно ли сделать так, чтобы Vim рисовал вертикальную линию на всю высоту экрана (или что-то вроде того), к примеру, после 80 символа, которая служила бы напоминанием, что если текст выходит за эту линию, предпочтительнее перенести его часть на новую строку?

можно выделять 80 колонку на каждой строке, которая больше 80 символов:

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

/.\{79}\zs.

Vim tip: Highlight text beyond 80 columns
slackware - linux for human brains
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: визуально отделить первые 80 символов каждой строки

Сообщение /dev/random »

nonstop писал(а):
04.05.2008 08:44
KonishchevDmitry писал(а):
01.05.2008 18:11
Подскажите, можно ли сделать так, чтобы Vim рисовал вертикальную линию на всю высоту экрана (или что-то вроде того), к примеру, после 80 символа, которая служила бы напоминанием, что если текст выходит за эту линию, предпочтительнее перенести его часть на новую строку?

можно выделять 80 колонку на каждой строке, которая больше 80 символов:

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

/.\{79}\zs.

Vim tip: Highlight text beyond 80 columns

Это будет сбрасываться при каждом поиске. А также неправильно работать с табами.

Лучше так:

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

:syn match Error /\%79v.*/
(чтобы выделить всё "лишнее")

или так:

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

:syn match Error /\%79v./
(чтобы выделить только 80-й символ)

Правда, и этот вариант не без изъяна. Он не работает, если 80-й символ попадает на синтаксически выделяемое ключевое слово. Может, кто ещё лучше предложит?
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: визуально отделить первые 80 символов каждой строки

Сообщение Luinnar »

KonishchevDmitry писал(а):
01.05.2008 18:11
Подскажите, можно ли сделать так, чтобы Vim рисовал вертикальную линию на всю высоту экрана (или что-то вроде того), к примеру, после 80 символа, которая служила бы напоминанием, что если текст выходит за эту линию, предпочтительнее перенести его часть на новую строку?

Если подсветка не нравится, то можно просто ширину окна установить в 80: :)

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

:winsize 80 57
Спасибо сказали:
Аватара пользователя
KonishchevDmitry
Сообщения: 92
ОС: Ubuntu
Контактная информация:

Re: визуально отделить первые 80 символов каждой строки

Сообщение KonishchevDmitry »

Спасибо за советы, но все-таки хотелось бы чего-то менее конфликтующего с поиском/подсветкой синтаксиса. Так что если кто-то предложит что-то по-лучше, буду очень благодарен. :)
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: визуально отделить первые 80 символов каждой строки

Сообщение Luinnar »

KonishchevDmitry писал(а):
04.05.2008 20:02
Спасибо за советы, но все-таки хотелось бы чего-то менее конфликтующего с поиском/подсветкой синтаксиса. Так что если кто-то предложит что-то по-лучше, буду очень благодарен. :)

Можно ещё макс ширину текста указать:

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

:set tw=80
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: визуально отделить первые 80 символов каждой строки

Сообщение ZyX »

KonishchevDmitry писал(а):
04.05.2008 20:02
Спасибо за советы, но все-таки хотелось бы чего-то менее конфликтующего с поиском/подсветкой синтаксиса. Так что если кто-то предложит что-то по-лучше, буду очень благодарен. :)
После некоторых ковыряний случайно натолкнулся на команду «:match». Получился такой код:

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

" Добавить в .vimrc
highlight TooLongLine term=reverse ctermfg=Yellow ctermbg=Red
3match TooLongLine /.\%>81v/
Ни с чем не конфликтует, если, конечно, не считать конфликтом то, что вместо подсветки синтаксиса часть строки начиная с 81 колонки выделяется жёлтым на красном фоне (ошибки выделяются белым на красном фоне, поэтому был взят жёлтый).
Спасибо сказали:
Аватара пользователя
pento
Сообщения: 403
ОС: Fedora 10

Re: визуально отделить первые 80 символов каждой строки

Сообщение pento »

ZyX
О! Мега фишка :) Расскажу о ней в блоге про вим.
Спасибо сказали:
Аватара пользователя
KonishchevDmitry
Сообщения: 92
ОС: Ubuntu
Контактная информация:

Re: визуально отделить первые 80 символов каждой строки

Сообщение KonishchevDmitry »

ZyX писал(а):
05.06.2008 14:10
После некоторых ковыряний случайно натолкнулся на команду «:match». Получился такой код:

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

" Добавить в .vimrc
highlight TooLongLine term=reverse ctermfg=Yellow ctermbg=Red
3match TooLongLine /.\%>81v/
Ни с чем не конфликтует, если, конечно, не считать конфликтом то, что вместо подсветки синтаксиса часть строки начиная с 81 колонки выделяется жёлтым на красном фоне (ошибки выделяются белым на красном фоне, поэтому был взят жёлтый).
Конфликтует... Если поместить курсор на круглую скобку, то подсветка исчезает во всем файле.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: визуально отделить первые 80 символов каждой строки

Сообщение ZyX »

KonishchevDmitry писал(а):
05.06.2008 18:12
Конфликтует... Если поместить курсор на круглую скобку, то подсветка исчезает во всем файле.
Заметил. Изменить 3 на 2 в начале строки. Или вовсе убрать.
Спасибо сказали:
Аватара пользователя
KonishchevDmitry
Сообщения: 92
ОС: Ubuntu
Контактная информация:

Re: визуально отделить первые 80 символов каждой строки

Сообщение KonishchevDmitry »

ZyX писал(а):
06.06.2008 09:41
KonishchevDmitry писал(а):
05.06.2008 18:12
Конфликтует... Если поместить курсор на круглую скобку, то подсветка исчезает во всем файле.
Заметил. Изменить 3 на 2 в начале строки. Или вовсе убрать.
О, спасибо, теперь работает. Правда только в Vim'e. :) GVim вообще ничего не подсвечивает.
Спасибо сказали:
Аватара пользователя
nonstop
Сообщения: 132
ОС: Slackware

Re: визуально отделить первые 80 символов каждой строки

Сообщение nonstop »

И снова насчет подсветки длинных строк.
Написал вот такого монстрика - подсвечивает сколько надо (по заданной длине)
например так:

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

MatchLongLines 100

подсветит окончания строк за 100м символом

собственно вот:

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

 hi LongLines guibg=#88e088 guifg=#000000 gui=none
python << EOF
def matchLongLines(len):
    pattern = "/\%>" + str(len) + "v.\+/"
    vim.command(("match LongLines %s") % pattern)
EOF
function! s:match_long_lines(len)
    execute ":py matchLongLines(".a:len.")"
endfunction
command  -nargs=1 MatchLongLines call s:match_long_lines(<f-args>)


PS:
как обойтись без python, к сожалению, не осилил
slackware - linux for human brains
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: визуально отделить первые 80 символов каждой строки

Сообщение ZyX »

nonstop писал(а):
10.06.2008 15:53
PS:
как обойтись без python, к сожалению, не осилил
А

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

if a:len<0
    echoerr "Отрицательная длина!"
    return 1
endif
execute "match LongLines /\\%>".a:len."v.\\+/"
return 0
? Кстати, а Python не превращает «\%» и «\+» в «%» и «+» соответственно? В двойных кавычках Vim так делает, в одинарных --- нет. А Python я знаю плохо.
Спасибо сказали:
Аватара пользователя
nonstop
Сообщения: 132
ОС: Slackware

Re: визуально отделить первые 80 символов каждой строки

Сообщение nonstop »

2 ZyX
спаибо, так намного проще
видимо думал слишком :)

ZyX писал(а):
10.06.2008 19:31
? Кстати, а Python не превращает «\%» и «\+» в «%» и «+» соответственно? В двойных кавычках Vim так делает, в одинарных --- нет. А Python я знаю плохо.

строки обрабатываются где-то так

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

>>> s = "%%%d\s"
>>> print s
%%%d\s

>>> s = "%%%d\s" % 10
>>> print s
%10\s
slackware - linux for human brains
Спасибо сказали:
Ответить