игнорирование регистра не действует для русского

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

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

Kostafey
Сообщения: 19
ОС: OpenSuSE/WinXP

игнорирование регистра не действует для русского

Сообщение Kostafey »

Гм. Почему-то не получается настроить игнорирование
регистра при поиске

Содержимое _vimrc:

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

" установить keymap, чтобы по Ctrl+^ переключался на русский и обратно
set keymap=russian-jcukenwin
" по умолчанию - латинская раскладка
set iminsert=0
" по умолчанию - латинская раскладка при поиске
set imsearch=0
" игнорировать регистр при поиске
set ic
" подсвечивать поиск
set hls
" использовать инкрементальный поиск
set is


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

Re: игнорирование регистра не действует для русского

Сообщение Luinnar »

Kostafey писал(а):
29.06.2008 15:05
Гм. Почему-то не получается настроить игнорирование
регистра при поиске

Содержимое _vimrc:

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

" установить keymap, чтобы по Ctrl+^ переключался на русский и обратно
set keymap=russian-jcukenwin
" по умолчанию - латинская раскладка
set iminsert=0
" по умолчанию - латинская раскладка при поиске
set imsearch=0
" игнорировать регистр при поиске
set ic
" подсвечивать поиск
set hls
" использовать инкрементальный поиск
set is


Однако поиск в файле остается чувствительным к регистру символов.

Может у тебя в опциях ещё "set smartcase" прописано? В этом случае при вводе слова, содержащего буквы в верхнем регистре, игнорирование регистра при поиске будет отключено.
Спасибо сказали:
Kostafey
Сообщения: 19
ОС: OpenSuSE/WinXP

Re: игнорирование регистра не действует для русского

Сообщение Kostafey »

Luinnar писал(а):
30.06.2008 12:26
Может у тебя в опциях ещё "set smartcase" прописано? В этом случае при вводе слова, содержащего буквы в верхнем регистре, игнорирование регистра при поиске будет отключено.


Нет. Я нарочно экспериментирую с "чистым" конфигурационным файлом.
Ничего друго в нем нет.

Небольшое замечание: при поиске по английскому тексту для
вышеприведенного конфига при поиске регистр действительно
игнорируется.

Игнорирование не действует только для русского текста.
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: игнорирование регистра не действует для русского

Сообщение Luinnar »

Kostafey писал(а):
30.06.2008 16:26
Luinnar писал(а):
30.06.2008 12:26
Может у тебя в опциях ещё "set smartcase" прописано? В этом случае при вводе слова, содержащего буквы в верхнем регистре, игнорирование регистра при поиске будет отключено.


Нет. Я нарочно экспериментирую с "чистым" конфигурационным файлом.
Ничего друго в нем нет.

Небольшое замечание: при поиске по английскому тексту для
вышеприведенного конфига при поиске регистр действительно
игнорируется.

Игнорирование не действует только для русского текста.

Ну тогда, кажется, ясно. Я не уверен, что такая фича будет работать и для русского.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: игнорирование регистра не действует для русского

Сообщение ZyX »

Kostafey писал(а):
30.06.2008 16:26
Игнорирование не действует только для русского текста.
Я не знаю, что с игнорированием (у меня оно работает и для русского языка, сейчас проверил), но есть такое наблюдение: если локаль не русская (точнее, не предполагает возможности использовать русский, как, например, «C» (с «en_US.UTF-8» всё нормально)), то функции «toupper/tolower» не работают.

Кстати, в моём предыдущем сообщении я перепутал право и лево.
Спасибо сказали:
Kostafey
Сообщения: 19
ОС: OpenSuSE/WinXP

Re: игнорирование регистра не действует для русского

Сообщение Kostafey »

ZyX писал(а):
03.07.2008 20:24
Kostafey писал(а):
30.06.2008 16:26
Игнорирование не действует только для русского текста.
Я не знаю, что с игнорированием (у меня оно работает и для русского языка, сейчас проверил), но есть такое наблюдение: если локаль не русская (точнее, не предполагает возможности использовать русский, как, например, «C» (с «en_US.UTF-8» всё нормально)), то функции «toupper/tolower» не работают.

Кстати, в моём предыдущем сообщении я перепутал право и лево.


Гм, а для русского действительно не работают gUw/guw
Для английского - все нормально.

Это как-то исправляется?
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: игнорирование регистра не действует для русского

Сообщение ZyX »

Kostafey писал(а):
03.07.2008 20:45
Это как-то исправляется?
А локаль «*.UTF-8»? Или «ru_RU.*»? Если да, то должно работать. Если да и не работает, то вывод «vim --version».



Если кому интересно, то я закончил функцию транслитерации для Vim'а. В теории должна работать для любого количества символов в последовательности, в отличие от той, что я использовал до того: та держала только два символа в последовательности и сделать так, чтобы последовательность «sch» соответствовала букве «щ», было невозможно. Кроме того, старая функция несколько неадекватно работала с UTF-8 (впрочем, новая превращает UTF-8 String в List, что, по-моему, есть костыль). Кроме того, новая функция слишком жирная. На vim.org не отправляю, так как пока отсутствует документация.

Старая функция:

Код:

if exists("g:loadedtranslit") finish endif let g:loadedtranslit=1 let s:russian={} scriptencoding utf-8 call extend(s:russian,{"a" : 'а'}) call extend(s:russian,{"b" : 'б'}) call extend(s:russian,{"c" : 'ц'}) call extend(s:russian,{"d" : 'д'}) call extend(s:russian,{"e" : 'е'}) call extend(s:russian,{"f" : 'ф'}) call extend(s:russian,{"g" : 'г'}) call extend(s:russian,{"h" : 'х'}) call extend(s:russian,{"i" : 'и'}) call extend(s:russian,{"j" : 'й'}) call extend(s:russian,{"k" : 'к'}) call extend(s:russian,{"l" : 'л'}) call extend(s:russian,{"m" : 'м'}) call extend(s:russian,{"n" : 'н'}) call extend(s:russian,{"o" : 'о'}) call extend(s:russian,{"p" : 'п'}) call extend(s:russian,{"q" : 'я'}) call extend(s:russian,{"r" : 'р'}) call extend(s:russian,{"s" : 'с'}) call extend(s:russian,{"t" : 'т'}) call extend(s:russian,{"u" : 'у'}) call extend(s:russian,{"v" : 'в'}) call extend(s:russian,{"w" : 'ш'}) call extend(s:russian,{"x" : 'ь'}) call extend(s:russian,{"y" : 'ы'}) call extend(s:russian,{"z" : 'з'}) call extend(s:russian,{"zh" : 'ж'}) call extend(s:russian,{"ch" : 'ч'}) call extend(s:russian,{"wh" : 'щ'}) call extend(s:russian,{"xh" : 'ъ'}) call extend(s:russian,{"sh" : 'ш'}) call extend(s:russian,{"'" : 'ь'}) call extend(s:russian,{"\"" : 'ъ'}) call extend(s:russian,{"e\"": 'ё'}) call extend(s:russian,{"e'" : 'э'}) call extend(s:russian,{"u'" : 'ю'}) call extend(s:russian,{"o'" : 'ё'}) call extend(s:russian,{"i'" : 'й'}) call extend(s:russian,{"c'" : 'ч'}) call extend(s:russian,{"w'" : 'щ'}) call extend(s:russian,{"ex" : 'э'}) call extend(s:russian,{"ux" : 'ю'}) call extend(s:russian,{"ox" : 'ё'}) call extend(s:russian,{"ix" : 'й'}) call extend(s:russian,{"cx" : 'ч'}) call extend(s:russian,{"wx" : 'щ'}) call extend(s:russian,{"sch": 'щ'}) let g:translist={"ru": s:russian} let s:arrangedtrans={} " {{{ " function s:IsLong(strans, uchar) " for s:item in keys(a:strans) " if s:item=~a:uchar.'.\+' " return 1 " endif " endfor " return 0 " endfunction " }}} "{{{ Переделать массив из формы, удобной для человека, в форму, удобную скрипту function s:ArrangeTrans(trlanguag) let s:arranged={} " {{{ Get vars for [vars, key] in items(g:translist[a:trlanguag]) let s:fstchar=vars[0] if has_key(s:arranged,s:fstchar) if strlen(vars)<=1 let s:endvar="END" else let s:endvar=vars[1:] endif call extend(s:arranged[s:fstchar],{s:endvar : key}) else if strlen(vars)<=1 let s:endvar="END" else let s:endvar=vars[1:] endif call extend(s:arranged,{s:fstchar : {s:endvar : key}}) endif endfor " }}} return s:arranged endfunction " }}} " {{{ Получить символ из строки s:ustring function s:GetcharFromString() " {{{ Конец строки if s:index>=strlen(s:string) return "END:EOS" endif " }}} let s:r0=s:string[s:index] " {{{ Проверка полученных символов if !s:backchar " {{{ Эти символы надо экранировать, чтобы они не интерпретировались if s:r0=~"\<C-m>\\|\b\\|\<C-c>\\|\e" let s:backchar=1 return '\' else let s:index+=1 endif " }}} else " {{{ Если символы уже были заэкранированы let s:index+=1 let s:backchar=0 " }}} endif " }}} return s:r0 endfunction " }}} " {{{ Транслителировать символ function s:GetSymb(strans) if len(a:strans)>1 "{{{ Если есть несколько последовательностьей, начинающихся с символа "{{{ Объявление переменных let s:utab='@' " На этом символе обрывается последовательность, но сам " символ не печатается (предотврашение транслитерации " конструкции как конструкции из нескольких символов) let s:uchar=s:getchar() " Следующий символ " }}} " {{{ Обрыв последовательности if s:uchar==s:utab if has_key(a:strans, "END") return ["END:Converted,Tab", a:strans["END"]] endif return ["END:NotConverted,Tab,NoEND", s:uchar] endif " }}} " {{{ Последовательность if has_key(a:strans, s:uchar) " {{{ Это последовательность из нескольких символов " {{{ Из двух " if strlen(a:strans[s:uchar])<=1 return ["END:Converted,Len", a:strans[s:uchar]] " endif " }}} "TODO: {{{ Из трёх " sch — щ ; s — с ; c — ц ; h — х ; sc — к ; scc — т " {'s': 'с', 'sc': 'к', 'scc': 'т', 'sch': 'щ'} " {'s': {'END': 'с', 'c': 'к', 'cc': 'т', 'ch': 'щ'}} " }}} " }}} " elseif s:IsLong(a:strans, s:uchar) elseif has_key(a:strans, "END") " {{{ Следующий символ — не часть последовательности return [s:uchar, a:strans["END"]] " }}} else " {{{ Последовательность не обнаружена return ["END:NotConverted,2,NoEND", s:uchar] " }}} endif " }}} " }}} elseif has_key(a:strans, "END") " {{{ Если она одна return ["END:Converted,END", a:strans["END"]] " }}} endif " {{{ Последовательность не обнаружена return ["END:NotConverted,NoEND", s:uchar] " }}} endfunction " }}} " {{{ Основная функция function Translit(trlang,tsource,…) " {{{ Превращение массива в удобный скрипту вид if !has_key(s:arrangedtrans,a:trlang) let s:arrtrans=s:ArrangeTrans(a:trlang) call extend(s:arrangedtrans,{a:trlang : s:arrtrans}) let s:arrtrans=copy(s:arrtrans) else let s:arrtrans=s:arrangedtrans[a:trlang] endif " }}} " {{{ Объявление переменных let s:ucr="END:EO.*" "На этом прерывается транслитерация let s:ustring="" "Транслитерированная последовательность символов let s:uch="END:Beginning" "Чтобы не входил в бесконечный цикл let s:isupper=0 "По умолчанию символ в нижнем регистре let s:index=0 let s:backchar=0 "По умолчанию символы не специальные " }}} " {{{ Второй и следуюшие аргументы if a:tsource=="string" " {{{ Ввод из строки символов if a:0==0 echoerr "Недостаточно аргументов" return "" elseif a:0==1 let s:string=a:1 let s:getchar=function("s:GetcharFromString") else echoerr "Слишком много аргументов" return "" endif " }}} elseif a:tsource=="function" " {{{ Ввод из пользовательской функции " (задана символьной строкой) if a:0==0 echoerr "Не задана функция" elseif a:0==1 let s:getchar=function(a:1) else echoerr "Слишком много аргументов" return "" endif " }}} elseif a:tsource=="input" " {{{ Ввод из командной строки let s:string=input("Транслит: ") let s:getchar=function("s:GetcharFromString") " }}} else " {{{ Ошибка echoerr "Неизвестная команда: ".a:tsource return "" " }}} endif " }}} " {{{ Собственно, транслитерация while s:uch!~s:ucr " {{{ Если предыдущая последовательность закончилась if s:uch=~"END:.*" let s:uch=s:getchar() " {{{ Сиволы со специальным значением " {{{ Прерывание ввода if s:uch=="\<C-c>" || s:uch=="\e" break " }}} " {{{ Escape-последовательности elseif s:uch=='\' let s:gotch=s:getchar() let s:uch="END:EscapeSeq" continue " }}} " {{{ Пробел elseif s:uch==" " let s:ustring.=s:uch let s:uch="END:Space" continue endif " }}} " }}} endif " }}} " {{{ Транслитерация if s:uch!~s:ucr " {{{ Большие буквы if s:uch=~'\u' let s:uch=tolower(s:uch) let s:isupper=1 endif " }}} " {{{ Если есть последовательность, начинающаяся на s:uch if has_key(s:arrtrans,s:uch) let s:ulist=s:GetSymb(s:arrtrans[s:uch]) " {{{ Большие буквы if s:isupper let s:ulist[1]=toupper(s:ulist[1]) let s:isupper=0 endif " }}} let s:ustring.=s:ulist[1] let s:uch=s:ulist[0] continue endif " }}} " {{{ Если её нет, то надо провести обратную конвертацию регистра if s:isupper let s:uch=toupper(s:uch) let s:isupper=0 endif " }}} let s:ustring.=s:uch let s:uch="END:NoSymb" continue " }}} else break endif endwhile " }}} return s:ustring endfunction " }}} " {{{ Печать таблицы транслитерации function ReturnTranslitTable(trlang) let s:rd={} let s:returnedstring="" for s:key in keys(a:trlang) if !has_key(s:rd, a:trlang[s:key]) call extend(s:rd, {a:trlang[s:key]: []}) endif call add(s:rd[a:trlang[s:key]], s:key) endfor let s:max=0 for s:key in keys(s:rd) if strlen(s:key)>s:max let s:max=strlen(s:key) endif endfor let s:keys=sort(keys(s:rd)) for s:key in s:keys let s:returnedstring.=printf("%*s : %s\n", s:max, s:key, s:rd[s:key][0]) let s:rd[s:key]=s:rd[s:key][1:-1] for s:val in s:rd[s:key] let s:returnedstring.=printf("%*s %s\n", s:max, " ", s:val) endfor endfor return s:returnedstring endfunction " }}} " vim: fenc=utf-8:ts=4


Новая функция:

Код:

"{{{1 инициализация scriptencoding utf-8 if exists("g:transliterationscriptloaded") finish endif let g:transliterationscriptloaded=1 "{{{1 символы let g:transsymb={'ru': { \'a': 'а', \'b': 'б', \'c': { \'none': 'ц', \"'": 'ч', \'x': 'ч', \'h': 'ч' \}, \'d': 'д', \'e': { \'none': 'е', \"'": 'э', \'"': 'ё' \}, \'f': 'ф', \'g': 'г', \'h': 'х', \'i': { \'none': 'и', \"'": 'й', \'x': 'й' \}, \'j': 'й', \'k': 'к', \'l': 'л', \'m': 'м', \'n': 'н', \'o': { \'none': 'о', \"'": 'ё', \'x': 'ё' \}, \'p': 'п', \'q': 'я', \'r': 'р', \'s': { \'none': 'с', \'h': 'ш', \'c': { \'h': 'щ' \} \}, \'t': 'т', \'u': { \'none': 'у', \"'": 'ю', \'x': 'ю' \}, \'v': 'в', \'w': { \'none': 'ш', \"'": 'щ', \'x': 'щ' \}, \'x': { \'none': 'ь', \'x': 'ъ', \'options': { \'capital': 'none' \} \}, \'y': { \'none': 'ы', \'options': { \'capital': 'none' \} \}, \'z': 'з', \"'": { \'none': 'ь', \'options': { \'capital': 'none' \} \}, \'"': { \'none': 'ъ', \'options':{ \'capital': 'none' \} \} \}} "{{{1 стандартные настройки if !exists("g:transliterationscriptEndSequenceSymbols") let g:transliterationscriptEndSequenceSymbols=['@'] endif if !exists("g:transliterationscriptEscapeNextChar") let g:transliterationscriptEscapeNextChar=['\'] endif if !exists("g:transliterationscriptStartEndNoTranslitSymb") let g:transliterationscriptStartEndNoTranslitSymb=[["%"], ["%"]] endif "{{{1 функция "{{{2 транслитерация " возвращяет словарь с: " 'exitstatus': статус выхода: " 'trsuc' : транслитерация прошла успешно " 'error' : в словаре символов, используемых при транслитерации " присутствует ошибка " 'trerr' : не удалось транслитерировать " 'trans' : результат транслитерации " 'deltai' : количество обработанных символов " 'upper' : символ является большой буквой " в качестве аргументов принимает словарь с символами для транслитерации и " строку, начинающуюся с символа, подлежащего обработке. словарь с символами для " транслитерации может содержать только ту часть, что относится к первому " символу. function s:transGetChar(transsymb, string) "{{{3 объявление переменных let l:i=0 let l:isupper=0 let l:string=a:string "{{{3 основная часть "{{{4 буква является заглавной if l:string[0]=~'\u' && !has_key(a:transsymb, l:string[0]) && \has_key(a:transsymb, tolower(l:string[0])) if type(a:transsymb[tolower(l:string[0])])==type({}) if has_key(a:transsymb[tolower(l:string[0])], \'options') if has_key(a:transsymb[tolower(l:string[0])]['options'], \'capital') if !a:transsymb[tolower( \l:string[0])]['options']['capital']== \'none' let l:isupper=1 let l:string[0]=tolower(l:string[0]) endif else let l:isupper=1 let l:string[0]=tolower(l:string[0]) endif else let l:isupper=1 let l:string[0]=tolower(l:string[0]) endif else let l:isupper=1 let l:string[0]=tolower(l:string[0]) endif endif "{{{4 есть варианты транслитерации if has_key(a:transsymb, l:string[0]) "{{{5 нет последовательности "транслитерация не зависит от следующих символов if type(a:transsymb[l:string[0]])==type('') let l:i=1 if DoesListBeginWith(l:string[1:-1], \g:transliterationscriptEndSequenceSymbols) let l:i+=len(g:transliterationscriptEndSequenceSymbols) endif return { \'exitstatus': 'trsuc', \'trans': a:transsymb[l:string[0]], \'deltai': l:i, \'upper': l:isupper \} "{{{5 есть последовательность elseif type(a:transsymb[l:string[0]])==type({}) "{{{6 инициализация if len(l:string)>1 && !DoesListBeginWith(l:string[1:-1], \g:transliterationscriptEndSequenceSymbols) "{{{7 Рекурсия let l:lastreturnedstatus=s:transGetChar( \a:transsymb[l:string[0]], l:string[1:-1]) let l:i=1 else let l:lastreturnedstatus={ \'exitstatus': 'trerr', \'trans': '', \'deltai': 0, \'upper': l:isupper \} endif "{{{6 если рекурсия вернула ошибку транслитерации if l:lastreturnedstatus['exitstatus']=='trerr' "{{{7 инициализация let l:i=0 "{{{7 нет последовательности " но есть транслитерация одной буквы if has_key(a:transsymb[l:string[0]], 'none') let l:lastreturnedstatus={ \'exitstatus': 'trsuc', \'trans': a:transsymb[l:string[0]]['none'], \'deltai': 1, \'upper': l:isupper \} if DoesListBeginWith(l:string[1:-1], \g:transliterationscriptEndSequenceSymbols) let l:i+=len(g:transliterationscriptEndSequenceSymbols) endif "{{{7 варианты транслитерации отсутствуют else let l:lastreturnedstatus={ \'exitstatus': 'trerr', \'trans': l:string[0], \'deltai': 1, \'upper': l:isupper \} endif endif "{{{5 ошибка else return { \'exitstatus': 'error' \} endif "{{{6 в любом случае return { \'exitstatus': l:lastreturnedstatus['exitstatus'], \'trans': l:lastreturnedstatus['trans'], \'deltai': l:lastreturnedstatus['deltai']+l:i, \'upper': l:isupper \} "{{{4 варианты транслитерации отсутствуют else return { \'exitstatus': 'trerr', \'trans': l:string[0], \'deltai': 1, \'upper': l:isupper \} endif endfunction "{{{2 Превращение строки в массив (List) " Нужно для поддержки UTF-8 function StringToList(string) let l:returnedlist=[] let l:i=0 while l:i!=len(a:string) call add(l:returnedlist, matchstr(a:string[(l:i):-1], '.')) let l:i+=len(l:returnedlist[-1]) endwhile return l:returnedlist endfunction "{{{2 Проверка, совпадает ли начало у двух массивов function DoesListBeginWith(list, beginning) if type(a:beginning)!=type([]) if !len(a:list) return 0 endif if a:list[0]==a:beginning return 1 endif return 0 endif if len(a:list)<len(a:beginning) return 0 endif if a:list[0:(len(a:beginning)-1)]==a:beginning return 1 endif return 0 endfunction "{{{2 основная функция function TransliterateString(transsymb, string) "{{{3 Объявление переменных let l:returnedstring="" let l:i=0 let l:string=StringToList(a:string) "{{{3 Основной цикл: транслитерация и т.д. while l:i<len(l:string) " echo l:i l:string[(l:i):-1] l:returnedstring let l:trsymb=s:transGetChar(a:transsymb, l:string[(l:i):-1]) "{{{4 Транслитерировано успешно "Транслитерация имеет приоритет больший, чем всё остальное, поэтому "возможный конфликт между настройками и словарём транслитерации "разрешается в пользу последнего. if l:trsymb['exitstatus']=='trsuc' if l:trsymb['upper'] let l:trsymb['trans']=toupper(l:trsymb['trans']) endif let l:returnedstring.=l:trsymb['trans'] let l:i+=l:trsymb['deltai'] continue endif "{{{4 Комбинации из настроек "{{{5 Следующий символ будет добавлен без транслитерации if DoesListBeginWith(l:string[(l:i):-1], \g:transliterationscriptEscapeNextChar) let l:i+=len(g:transliterationscriptEscapeNextChar) let l:returnedstring.=l:string[l:i] let l:i+=1 continue "{{{5 Следующие символы транслитерированы не будут elseif DoesListBeginWith(l:string[(l:i):-1], \g:transliterationscriptStartEndNoTranslitSymb[0]) let l:i+=len(g:transliterationscriptStartEndNoTranslitSymb[0]) while !DoesListBeginWith(l:string[(l:i):-1], \g:transliterationscriptStartEndNoTranslitSymb[1]) && \l:i<len(l:string) "{{{6 Добавить след. символ без изменений if DoesListBeginWith(l:string[(l:i):-1], \g:transliterationscriptEscapeNextChar) let l:i+=len(g:transliterationscriptEscapeNextChar) let l:returnedstring.=l:string[l:i] let l:i+=1 continue endif "}}} let l:returnedstring.=l:string[l:i] let l:i+=1 endwhile let l:i+=len(g:transliterationscriptStartEndNoTranslitSymb[1]) continue endif "{{{4 Если символ транслитерировать не удалось if l:trsymb['exitstatus']=='trerr' if l:trsymb['upper'] let l:trsymb['trans']=toupper(l:trsymb['trans']) endif let l:returnedstring.=l:trsymb['trans'] let l:i+=l:trsymb['deltai'] continue endif let l:i+=1 endwhile return l:returnedstring endfunction "{{{1 vim: " vim: ft=vim:ts=4:fdm=marker:fenc=utf-8


Примеры использования новой функции:

Код:

" Командная строка как источник транслитерируемого текста. inoremap ,t <C-r>=TransliterateString(g:transsymb["ru"],input("Translit: "))<C-m> " Транслитерировать слово до курсора. inoremap ,T <C-o>b<C-o>"tdiw<C-r><C-r>=TransliterateString(g:transsymb["ru"],@t)<C-m> " Транслитерировать СЛОВО до курсора. inoremap ,et <C-o>B<C-o>"tdiW<C-r><C-r>=TransliterateString(g:transsymb["ru"],@t)<C-m>
Спасибо сказали:
Kostafey
Сообщения: 19
ОС: OpenSuSE/WinXP

Re: игнорирование регистра не действует для русского

Сообщение Kostafey »

ZyX писал(а):
04.07.2008 01:33
Kostafey писал(а):
03.07.2008 20:45
Это как-то исправляется?
А локаль «*.UTF-8»? Или «ru_RU.*»? Если да, то должно работать. Если да и не работает, то вывод «vim --version».


А в Windows локаль надо думать cp1251.
Версия vim-а 7.1
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: игнорирование регистра не действует для русского

Сообщение ZyX »

Kostafey писал(а):
09.07.2008 19:14
ZyX писал(а):
04.07.2008 01:33
Kostafey писал(а):
03.07.2008 20:45
Это как-то исправляется?
А локаль «*.UTF-8»? Или «ru_RU.*»? Если да, то должно работать. Если да и не работает, то вывод «vim --version».
А в Windows локаль надо думать cp1251.
Версия vim-а 7.1

Код:

(zyx:/home/zyx) % vim --version VIM — Vi IMproved 7.1 (2007 May 12, compiled Jun 5 2008 10:10:19) Заплатки: 1-266 С изменениями, внесёнными Gentoo-7.1.266 Скомпилирован root@localhost Огромная версия без графического интерфейса. Включённые (+) и отключённые (-) особенности: +arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments +cryptv +cscope +cursorshape +dialog_con +diff +digraphs -dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path +folding -footer +fork() +gettext -hangul_input +iconv +insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap +menu +mksession +modify_fname +mouse -mouseshape +mouse_dec -mouse_gpm -mouse_jsbterm +mouse_netterm +mouse_xterm +multi_byte +multi_lang -mzscheme -netbeans_intg -osfiletype +path_extra +perl +postscript +printer +profile +python +quickfix +reltime +rightleft -ruby +scrollbind +signs +smartindent -sniff +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup +X11 +xfontset -xim +xsmp_interact +xterm_clipboard -xterm_save общесистемный файл vimrc: "/etc/vim/vimrc" пользовательский файл vimrc: "$HOME/.vimrc" пользовательский файл exrc: "$HOME/.exrc" значение $VIM по умолчанию: "/usr/share/vim" Параметры компиляции: i686-pc-linux-gnu-gcc -c -I. -Iproto -DHAVE_CONFIG_H -O2 -march=prescott -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib/perl5/5.8.8/i686-linux/CORE -I/usr/include/python2.5 -pthread Сборка: i686-pc-linux-gnu-gcc -rdynamic -L/usr/local/lib -o vim -lXt -lcurses -lacl -rdynamic -L/usr/local/lib /usr/lib/perl5/5.8.8/i686-linux/auto/DynaLoader/DynaLoader.a -L/usr/lib/perl5/5.8.8/i686-linux/CORE -lperl -lutil -lc -L/usr/lib/python2.5/config -lpython2.5 -lpthread -lutil -lm -Xlinker -export-dynamic
Чуствуете разницу? Версия Vim'а — это последнее, что нужно для решения проблемы.

Впрочем, у меня Vim при LANG='ru_RU.CP1251' выдаёт вместо русских букв перевёрнутые вопросы, тогда как с «ru_RU.KOI8-R» всё нормально (обе кодировки неправильные, терминал юникодный, но когда «KOI8-R» результат — «ÔÔôôÔÔôô» вместо «ТТттТТтт» (uconv -f KOI8-R, натравленная на «ÔÔôôÔÔôô» даёт именно «ТТттТТтт»), а когда «CP1251» — «¿¿¿¿¿¿¿¿», все символы имеют один код). Вроде, чтобы работало, должны иметься «+multi_byte +multi_lang» в выводе «vim --version». И ещё, посмотри всё-таки вывод «echo $LANG» в Vim'е. И значение переменной LC_ALL в консоли, вроде в Windows это есть.
Спасибо сказали:
Kostafey
Сообщения: 19
ОС: OpenSuSE/WinXP

Re: игнорирование регистра не действует для русского

Сообщение Kostafey »

ZyX писал(а):
09.07.2008 21:26

Код:

C:\Program Files\Far>vim --version VIM - Vi IMproved 7.1 (2007 May 12, compiled May 12 2007 14:14:51) MS-Windows 32 bit console version Compiled by Bram@KIBAALE Big version without GUI. Features included (+) or not (-): +arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments +cryptv +cscope +cursorshape +dialog_con +diff +digraphs -dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path +folding -footer +gettext/dyn -hangul_input +iconv/dyn +insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap +menu +mksession +modify_fname +mouse -mouseshape +multi_byte +multi_lang -mzscheme -netbeans_intg -osfiletype +path_extra -perl -postscript +printer -profile -python +quickfix +reltime +rightleft -ruby +scrollbind +signs +smartindent -sniff +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl -tgetent -termresponse +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup -xfontset -xim -xterm_save -xpm_w32 system vimrc file: "$VIM\vimrc" user vimrc file: "$HOME\_vimrc" 2nd user vimrc file: "$VIM\_vimrc" user exrc file: "$HOME\_exrc" 2nd user exrc file: "$VIM\_exrc" Compilation: cl -c /W3 /nologo -D_MT -MT -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DFEAT_CSCOPE -DWINVER=0x0400 -D_WIN32_WINN T=0x0400 /Fo.\ObjC/ /Ox -DNDEBUG -DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_BIG /Zi /Fd.\ObjC/ Linking: link /RELEASE /nologo /subsystem:console /incremental:no /nodefaultlib:libc advapi32.lib shell32.lib gdi32.lib comdlg32 .lib ole32.lib uuid.lib libcmt.lib user32.lib /PDB:vim.pdb -debug


Код:

C:\Program Files\Far>gvim --version VIM - Vi IMproved 7.1 (2007 May 12, compiled May 12 2007 14:17:41) MS-Windows 32 bit GUI version Compiled by Bram@KIBAALE Big version with GUI. Features included (+) or not (-): +arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments +cryptv +cscope +cursorshape +dialog_con_gui +diff +digraphs -dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path +folding -footer +gettext/dyn -hangul_input +iconv/dyn +insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap +menu +mksession +modify_fname +mouse +mouseshape +multi_byte +multi_lang -mzscheme +netbeans_intg -ole -osfiletype +path_extra -perl -postscript +printer -profile -python +quickfix +reltime +rightleft -ruby +scrollbind +signs +smartindent -sniff +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl -tgetent -termresponse +textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup -xfontset -xim -xterm_save -xpm_w32 system vimrc file: "$VIM\vimrc" user vimrc file: "$HOME\_vimrc" 2nd user vimrc file: "$VIM\_vimrc" user exrc file: "$HOME\_exrc" 2nd user exrc file: "$VIM\_exrc" system gvimrc file: "$VIM\gvimrc" user gvimrc file: "$HOME\_gvimrc" 2nd user gvimrc file: "$VIM\_gvimrc" system menu file: "$VIMRUNTIME\menu.vim" Compilation: cl -c /W3 /nologo -D_MT -MT -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DFEAT_CSCOPE -DFEAT_NETBEANS_INTG -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 /Fo.\ObjG/ /Ox -DNDEBUG -DFEAT_GUI_W32 -DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_BIG /Zi /Fd.\ObjG/ Linking: link /RELEASE /nologo /subsystem:windows /incremental:no /nodefaultlib:libc advapi32.lib shell32.lib gdi32.lib comdlg32.lib ole32.lib uuid.lib oldnames.lib kernel32.lib gdi32.lib version.lib winspool.lib comctl32.lib advapi32.lib shell32.lib /machine:i386 /nodefaultlib libcmt.lib user32.lib WSock32.lib /PDB:gvim.pdb -debug


ZyX писал(а):
09.07.2008 21:26
И ещё, посмотри всё-таки вывод «echo $LANG» в Vim'е.

Выдает: ru

ZyX писал(а):
09.07.2008 21:26
И значение переменной LC_ALL в консоли, вроде в Windows это есть.

К сожалению у меня нет:
C:\Program Files\Far>echo %LC_ALL%
%LC_ALL%
Спасибо сказали:
Kostafey
Сообщения: 19
ОС: OpenSuSE/WinXP

Re: игнорирование регистра не действует для русского

Сообщение Kostafey »

Kostafey писал(а):
09.07.2008 23:00
ZyX писал(а):
09.07.2008 21:26



Так все же что делать русскими буквами в Windows?
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: игнорирование регистра не действует для русского

Сообщение Luinnar »

Kostafey писал(а):
16.07.2008 19:45
Так все же что делать русскими буквами в Windows?

Хм, попробовал в своей системе (Solaris 10). Игнорирование регистра при поиске русских слов работает, но только если искать в тексте кодировки UTF-8, при чем переменная $LANG не играет никакой роли (у меня $LANG=C). Так что мой совет - просто использовать utf-8 кодировку в редактируемых файлах и всё будет окей (конечно, если есть такая возможность):

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

set encoding=utf-8
Спасибо сказали:
Kostafey
Сообщения: 19
ОС: OpenSuSE/WinXP

Re: игнорирование регистра не действует для русского

Сообщение Kostafey »

Luinnar писал(а):
18.07.2008 18:39

Да, теперь заработало все.
И элементарные действия со словами, навроде dw
и gUw и игнорирование регистра при поиске и
перемещение по ctrl+left/right по словам.

Большое спасибо!

Правда, юникод не во всяком редакторе откроешь...
но это не беда, покуда есть vim :)
Спасибо сказали: