Будучи заинтригован User Sapiens-ом, решил испробовать vim. Скачал версию для Windows. Консольная не отображает многие русские буквы, решил пока мучить gvim. Тема blue вызвала ностальгию по турбо паскалю. ::)
Поколдовав с vimrc, (как я сам думаю) установил юникод по умолчанию; также снёс папку vim73/lang/. В результате имею английский vim, не путающийся с определением русских слов (а раньше, например, команда cw не работала). В ближайших планах написать AHK-скрипт, который избавил бы от необходимости постоянно переключать раскладку.
Со шрифтами какая-то ерунда. Кто-нибудь может подсказать, можно ли использовать системные шрифты? Вообще, можно ли каким-то образом добиться, например, чтобы одновременно отображались þ и ѣ?
Переключателя кодовых страниц там нет?
Цитата: Bhudh от декабря 18, 2011, 22:19
Переключателя кодовых страниц там нет?
Comment ?
Я думаю, там должно быть всё, только места надо знать.
Пока меня удивило вот что: в меню есть небольшой ассортимент шрифтов, для которых он предлагает «набор символов» (кириллица, западноевропейский, usw.). Я надеялся, что такого рода наборы символов вымерли...
Цитата: Квас от Comment ?
Ну, вроде þ и ѣ на разных кодовых страницах расположены, вот спрашиваю, наверное, они как-то динамически вдоль да по тексту должны переключаться?
http://sensi.org/~ak/linuxfaq/rulinux.faq-3.html#ss3.16 (http://sensi.org/~ak/linuxfaq/rulinux.faq-3.html#ss3.16)
Правда, это для Линуха...
В Линуксе уникод искаропки.
А в vimʼе поцчему-то нет.
Ага, encoding=utf-8 у меня прописано.
Наврал я, получается: ять отображается, например, в DejaVu Sans Mono. Почему-то некоторые из моих стандартных автозамен не работают (например, \ae ⇒ æ — нормально, а \ять ⇒ ѣ или \yogh ⇒ ȝ — не работают, появляются знаки вопроса).
А Вы пользуйтесь современными сборками, а не датированными 2003 годом.
Ну так я с их же сайта и скачал, что предлагали:
http://www.vim.org/download.php#pc
Написано, что скомпилировано в октябре 2010 года.
предыдущее моё сообщение было буду, который на howto 2003 года ссылается
Цитата: Квас от декабря 18, 2011, 22:47
Наврал я, получается: ять отображается, например, в DejaVu Sans Mono. Почему-то некоторые из моих стандартных автозамен не работают (например, \ae ⇒ æ — нормально, а \ять ⇒ ѣ или \yogh ⇒ ȝ — не работают, появляются знаки вопроса).
И не будет. Значит, Ваша сборка скомпилирована с использованием ANSI-функций (ну, Вы знаете, что у всех функций в Виндовс есть две версии: уникодная и анси...), видимо, для совместимости с 9x.
Ищите уникодную сборку. Если она вообще есть...
Цитата: Квас от декабря 18, 2011, 22:55
Ну так я с их же сайта и скачал, что предлагали:
http://www.vim.org/download.php#pc
Написано, что скомпилировано в октябре 2010 года.
Я подозреваю, что версией для Виндовс просто никто не занимается. Поэтому те изменения, которые не зависят от системы, в сборке 2010 года есть, в том числе внутренний код для поддержки уникода. А внешнего кода для поддержки уникода (который требовал бы изменения именно версии для Виндовс) нет.
Короче, я думаю, что вим под Виндовс -- гиблое дело.
Цитата: Demetrius от декабря 18, 2011, 23:03
Короче, я думаю, что вим под Виндовс -- гиблое дело.
Весьма печально.
Цитата: Demetrius от предыдущее моё сообщение было буду, который на howto 2003 года ссылается
;D
Я вообще никакой сборкой не пользуюсь. Что гугл выдал, то и запостил.
Я ж не виноват, что он старьё подсовывает.
Цитата: Demetrius от декабря 18, 2011, 23:03
ороче, я думаю, что вим под Виндовс -- гиблое дело.
А если cygwin поставить? (Я когда-то пробовал, не получилось и остались ужасные воспоминания.)
Да, явно не в шрифтах дело. Вместо ŷ он вводит y, вместо ǫ — o.
Может быть, когда-нибудь я научусь программировать и...
IMHO проще перейти на Линукс, чем разбираться с Цыгвином. ;D
Оле-оле-оле-оле! Есть способ!
http://vim.wikia.com/wiki/Entering_special_characters
Цыгвин буду сносить. :green:
Так это же такой же костыль... :what:
Цитата: Demetrius от декабря 19, 2011, 06:33
Так это же такой же костыль... :what:
Почему? Есть способ ввести любой символ. Никто не мешает добавить автоматизации и сделать удобно.
Ну так это же будет работать только в виме. Минуя Вашу раскладку. :what:
Цитата: Demetrius от декабря 19, 2011, 06:47
Ну так это же будет работать только в виме. Минуя Вашу раскладку. :what:
Ну так и ладно. У меня раскладок всего две, и те стандартные — остальное делают скрипты. Во-первых, и так в виме есть такие вещи, которые больше нигде не работают. Во-вторых, я, очевидно, могу модифицировать свой огромный скрипт с автозаменами specially for vim и иметь привычную функциональность \ять ⇒ ѣ. В-третьих, возможно, существует vim way — может, даже более элегантный.
Ссылку-то на туториал дайте. Я какбе пользуюсь вимом, но самыми базовыми функциями, углубиться все никак не удосужусь.
Я пока только прошёл vimtutor, который есть в дистрибутиве, и прочитал
http://ru.wikibooks.org/wiki/Vim
Цитата: User Sapiens от декабря 17, 2011, 22:37
Для уже освоившихся советую почитывать, к примеру, этот блог (http://www.allaboutvim.ru/).
Да и вообще что-то по vim-у, т. к. очень часто вставшая перед проблема уже давно решена.
Пост почти без смысла (http://lingvowiki.info/wiki/images/7/7e/Sm_wink.svg) , чтобы в теме появиться и получать обновления
Благодаря возможностям настройки vim-а его можно настроить именно так как хочется, учитывая только свои пожелания и наклонности, а не зависеть от «злого программиста».
Цитата: User Sapiens от декабря 21, 2011, 21:02
Благодаря возможностям настройки vim-а его можно настроить именно так как хочется, учитывая только свои пожелания и наклонности, а не зависеть от «злого программиста».
...но при этом для его настройки во многом самому придётся быть злым программистом...
Цитата: Demetrius от декабря 21, 2011, 21:05
...но при этом для его настройки во многом самому придётся быть злым программистом...
Что правильно. :yes: Чем лучше в век компьютеров человек владеет компьютером, тем лучше.
Цитата: Demetrius от декабря 21, 2011, 21:05
Цитата: User Sapiens от декабря 21, 2011, 21:02
Благодаря возможностям настройки vim-а его можно настроить именно так как хочется, учитывая только свои пожелания и наклонности, а не зависеть от «злого программиста».
...но при этом для его настройки во многом самому придётся быть злым программистом...
Конечно. Но, по большему счёту, vim самодостаточен как хороший блокнот уже «из коробки», поэтому пользователи которые хотят просто писать текст и не размышлять о смысле блокнотной жизни могут спокойно им пользоваться.
Когда же речь идёт о более продвинутом пользовании, то, чаще всего, такие пользователи имеют нужное понимание действий и могут себе позволить немного побыть «злыми программистами», чтобы ещё более облегчить себе жизнь.
Соглашусь также с
Квасом — «Чем лучше в век компьютеров человек владеет компьютером, тем лучше». А то когда видишь подростков, которые выросли на этой технике, но даже не в состоянии пользоваться слепой печатью, сразу думаешь о том сколько времени они смогли бы сэкономить и как они смогли бы упростить себе жизнь. А это именно то зачем компьютеры были созданы и никакие игры и соц. сети этого не заменят.
Предвидя замечания о смещении функций компьютеров в сторону развлечений и ко., хочу только заметить, что даже время на домашние работы, типа рефератов (которые на сегодняшний день делаются с помощью компьютер) можно было бы сократить в несколько раз и уже свободное время провести за играми, а не стонать о непосильных домашних заданиях.
Ух что-то я расписался... а тема всего лишь о простом блокнотике (http://lingvowiki.info/wiki/images/7/7e/Sm_wink.svg)
Предыдущий пост от души плюсую.
Я так понимаю, чудиков, которые одновременно юзают vim и Windows, у нас маловато. ;D Всё равно представлю на суд публики альфа-версию AutoHotkey-скрипта, который должен облегчить жизнь с раскладками.
Общая идеология такая: при переходе из Insert в Normal используемая раскладка должна запоминаться, а текущая раскладка должна становиться английской. Соответственно, при переходе в режим Insert или Replace должна восстанавливаться раскладка.
Скриптом некоторое время пользуюсь, вроде работает. Подозреваю, что сюрпризов стоит ждать от режима Ex.
; Two chief objectives of this script are:
; - to switch the layout to English entering the Normal mode;
; - to save the text layout when quitting the text modes and to restore it entering them again.
; It is convenient to group the basic modes as follows:
; Normal : Normal, Visual, Select
; Insert : Insert, Replace
; Command-line : Command-line
; Ex : Ex
GetActiveKeyboardLayout()
{
WinGet, WinID,, A
ThreadID := DllCall("GetWindowThreadProcessId", UInt, WinID, UInt, 0)
InputLocaleID:=DllCall("GetKeyboardLayout", UInt, ThreadID, UInt)
Return, InputLocaleID
}
SetLayout(Layout)
; The function accepts hexadecimal layout code or one of specific strings as its argument.
{
ControlGetFocus, C, A
If (Layout = "English")
{
PostMessage, 0x50,, 0x4090409, %C%, A
}
Else If (Layout = "Russian")
PostMessage, 0x50,, 0x4190419, %C%, A
Else If (Layout = "Russian_mash")
PostMessage, 0x50,, 0xf0080419, %C%, A
Else
PostMessage, 0x50,, %Layout%, %C%, A
}
SetTitleMatchMode, 2
WinActivate, GVIM
gosub, SetNormal
TextLayout := "English" ; default layout
return
#Hotstring *B0C?
#If Winactive("GVIM") and (Mode = "Normal") and (not CommandInput)
~Insert::
::i::
::I::
::a::
::A::
::o::
::O::
::R::
::s::
::S::
gosub, SetInsert
return
::c::
CommandInput := true
Input, tmp, VL2, {Esc}, "w,b,iw,aw,G,gg"
If ErrorLevel=Match
gosub, SetInsert
CommandInput := false
return
::r::
gosub, SetInsert
Input, tmp, VL1
gosub, QuitInsert
gosub, SetNormal
return
~+sc27:: ; colon
::/::
::?::
::!::
gosub, SetCommandLine
return
::Q::
gosub, SetEx
return
#If Winactive("GVIM") and (Mode = "Insert")
~Esc::
gosub, QuitInsert
gosub, SetNormal
return
#If Winactive("GVIM") and (Mode = "CommandLine")
~Esc::
~Enter::
gosub, SetNormal
return
#If Winactive("GVIM") and (Mode = "Ex")
::vi::
gosub, SetNormal
return
SetNormal:
Mode := "Normal"
SetLayout("English")
CommandInput := false
return
SetInsert:
Mode := "Insert"
SetLayout(TextLayout)
return
QuitInsert:
TextLayout := GetActiveKeyboardLayout()
return
SetCommandLine:
Mode := "CommandLine"
return
SetEx:
Mode := "Ex"
return
По мере использования последнего скрипта он имел тенденцию увеличиваться и усложняться. Например, символы-имена регистров не должны вызывать смены режима, и т. д. Поскольку смена режима производится разнообразными способами, а AHK работает «вслепую», то это костыль в чистом виде.
Придумал новое решение, идеологически верное.
О состояниях vim-а никто не знает лучше, чем сам vim. В то же время он не обязан разбираться в операционной системе (в частности, уметь менять раскладку). Следовательно, оптимальным вариантом является взаимодействие vim-а с приложением, которое хорошо работает с системой (AHK).
Взаимодействие я придумал организовать с помощью почты. В vimrc написал
autocmd InsertEnter *.* :call writefile(["1"], "c:\\blahblahblah.txt")
autocmd InsertLeave *.* writefile(["1"], "c:\\blahblahblah.txt")
Теперь при входе и выходе в режимы Insert и Replace vim оставляет записку. А AHK её мониторит:
loop
{
old_insert_mode := insert_mode
FileReadLine, insert_mode, %letter_from_vim%, 1
if (not old_insert_mode and insert_mode)
gosub, SetInsert
if (old_insert_mode and not insert_mode)
gosub, QuitInsert
Sleep, 10
}
Под метками SetInsert и QuitInsert выполняются манипуляции с раскладками.
Переменная insert_mode оказывается полезной и для языковой поддержки с помощью AHK: в зависимость от неё можно ставить автозамены, производящие разные юникодные символы, и в Normal mode всегда будет чистый ascii.
Кстати, с вводом символов проблем нет. Почему-то не всегда работают AHK-автозамены, но разные символы в принципе можно вводить с помощью ^Vu<номер> или диграфов, что уже спокойно можно повесить на AHK-автозамены.
Короче говоря, препятствий к использованию нет! ;up:
Вы так говорите, как будто текущая версия не костыль...
Новая тема: Навыки работы с компьютером (http://lingvoforum.net/index.php/topic,43169.msg1123790.html#msg1123790)
Спрошу такую вещь.
Прочитал про filtering: блок текста передаётся внешней программе и замещается аутпутом этой программы. Интересно, можно ли это сделать, например, для скрипта на питоне? И каким образом этот скрипт должен возвращать аутпут?
Цитата: Квас от января 2, 2012, 15:28
autocmd InsertEnter *.* :call writefile(["1"], "c:\\blahblahblah.txt")
autocmd InsertLeave *.* writefile(["1"], "c:\\blahblahblah.txt")
Разумеется, во втором случае 0 вместо 1.
Цитата: Квас от января 4, 2012, 18:31
Спрошу такую вещь.
Прочитал про filtering: блок текста передаётся внешней программе и замещается аутпутом этой программы. Интересно, можно ли это сделать, например, для скрипта на питоне? И каким образом этот скрипт должен возвращать аутпут?
Программа на Python'е должна читать стандартный канал ввода (
sys.stdin) и писать данные в стандартный вывод (
sys.stdout). Работать с ними можно, как с обычными файлами.
Тащемто
print("hello") в
sys.stdout и пишет.
Вот пример программы, которая к каждой строке добавляет смайлик:
from sys import stdin
for s in stdin:
print(s.rstrip() + " :)")
Бо́льшая проблема—как это запустить в vim'е. В Linux-то всё просто:
1. Добавляем в начало файла строку #!/usr/bin/env python3
2. Делаем файл исполняемым (chmod +x нашФайл в терминале)
3. В vim'е делаем :%!./нашФайл (если он в той же папке) или :%!/полный/путь/нашФайл; или размещаем его в папке, на которую указывает переменная PATH, и делем :%!нашФайл
В Windows, скорее всего, придется в vim'е вызывать его так:
:%!C:\Python3\pyton.exe нашФайлХотя я и не проверял.
Из того, что приходит в голову: можно занести путь к Python'у в переменную окружения PATH. Можно сделать bat-файл, и вызывать bat-файл (хотя я не уверен, что можно).
абырвалг, спасибо! Ответ на главную мою непонятность в следующем:
Цитата: абырвалг от января 4, 2012, 19:45
Программа на Python'е должна читать стандартный канал ввода (sys.stdin) и писать данные в стандартный вывод (sys.stdout). Работать с ними можно, как с обычными файлами.
А как к vim-у прикрутить — надо поэкспериментировать.
А что по поводу стратегии работы в виме с текстом? Конкретно, с разбиением на строки.
С одной стороны, автоматически разбивать на строки довольно удобно (например, при организации обратного поиска).
Но неудобства у автоматического разбиения более серьёзные. Во-первых, при редактировании строки получаются самой разной длины, и надо не забывать разбивать их снова. Во-вторых, структура абзаца никак не связана со строками, поэтому команды типа «удалить строку» бесполезны, ограниченно работает поиск символа в (команда f) и пр.
Видимо, лучше вернуться к старым привычкам и не разбивать на строки. Что тогда с навигацией? Получается, что команды j и h перемещают между абзацами, а внутри абзаца можно двигаться по предложениям, по словам или до символа. В принципе, это логично, только скобки нажимать не так удобно, как клавиши основного ряда.
У меня нет под рукой вима сейчас (сижу в Windows), так что проверяйте, работают ли мои советы, сами. :green:
Цитата: Квас от февраля 5, 2012, 12:03
Но неудобства у автоматического разбиения более серьёзные. Во-первых, при редактировании строки получаются самой разной длины, и надо не забывать разбивать их снова.
Установите себе
:set fo=a2w, пусть vim сам и разбивает. :donno: Полный список возможных опций (кроме
a2w) см. в fo-table (http://vimdoc.sourceforge.net/htmldoc/change.html#fo-table).
ЦитироватьВо-вторых, структура абзаца никак не связана со строками, поэтому команды типа «удалить строку» бесполезны, ограниченно работает поиск символа в (команда f) и пр.
Может, стоит использовать
{ и
} для навигации по абзацам? :-\
Цитата: Квас от февраля 5, 2012, 12:03Видимо, лучше вернуться к старым привычкам и не разбивать на строки. Что тогда с навигацией? Получается, что команды j и h перемещают между абзацами, а внутри абзаца можно двигаться по предложениям, по словам или до символа. В принципе, это логично, только скобки нажимать не так удобно, как клавиши основного ряда.
Для перехода по строкам можно использовать gj и gk. Можно даже сделать команды j и k основными:
noremap <buffer> <silent> k gk
noremap <buffer> <silent> j gjВзято отсюда: http://vim.wikia.com/wiki/Move_cursor_by_display_lines_when_wrapping (http://vim.wikia.com/wiki/Move_cursor_by_display_lines_when_wrapping), по ссылке больше всего.
P.S. А я отошёл от вима и доволен. ëat:
Спасибо большое за советы!
Цитата: Д3 от февраля 5, 2012, 12:51
P.S. А я отошёл от вима и доволен. ëat:
У меня, напротив, рвение неофита. ;D
С помощью AHK сделал себе модальным Far. Передвигаюсь теперь по hjkl. :green:
Цитата: Д3 от февраля 5, 2012, 12:51
ЦитироватьВо-вторых, структура абзаца никак не связана со строками, поэтому команды типа «удалить строку» бесполезны, ограниченно работает поиск символа в (команда f) и пр.
Может, стоит использовать { и } для навигации по абзацам? :-\
Это конечно.
Речь о навигации внутри абзаца: разрывы строк препятствуют, например, командам f и F.
Цитата: Квас от февраля 8, 2012, 11:13
С помощью AHK сделал себе модальным Far. Передвигаюсь теперь по hjkl. :green:
Под Линукс был какой-то файлменеджер с интерфейсом как у vim'а. Но когда я проверял, в нём не было поддержки UTF-8.
NERD_tree — это мегакруто!
vim + python3
Предположим, имеется юникодный файл с кириллическим текстом. Поместим курсор на какую-нибудь достаточно длинную строку (дюжины символов хватит).
Фокус:
:py3 import vim
:py3 l = vim.current.line
:py3 vim.current.line = l
Внезапно половина строчки пропадает. Подозреваю, что из-за многобайтности. Но как избежать такого нехорошего эффекта?
(Если кто-то попробует повторить, и не будет получаться, то нужно проверить с помощью version, есть ли python3; работает с той версией питона, с которой вим скомпилирован — у меня 3.1.)