- PVSM.RU - https://www.pvsm.ru -
Вчера, 6 июля 2013, Брам Мооленаар объявил [1] о выходе первой бета‐версии Vim 7.4: одного из лучших текстовых редакторов мира *nix.
Основные изменения:
Движок, называемый теперь старым, использует алгоритм, основанный на возвратах. Он пытается найти соответствие текста регулярному выражению одним способом, а при неудаче возвращается назад и пытается использовать другой способ (перевод :h new-regexp-engine [2]). Данный алгоритм хорошо работает с простыми регулярными выражениями, но более сложные могут отрабатывать слишком долго на длинных текстах.
Новый движок использует конечный автомат. Он проверяет все возможные альтернативы для данного символа и сохраняет возможные состояния регулярного выражения. Данный подход работает несколько медленнее на простых регулярных выражениях, но при этом весьма быстр при работе со сложными выражениями и длинными текстами.
Данное изменение наиболее заметно при просмотре Javascript и XML файлов, содержащих длинные строки: сейчас Vim работает с нормальной скоростью в этих случаях, тогда как ранее вы могли видеть сильные тормоза.
В настоящий момент движок достаточно стабилен, однако и сейчас иногда находят сложные регулярные выражения, которые изменяют своё поведение при использовании нового движка. Удаление старого движка из исходного кода Vim не планируется: наоборот, Брам говорил, что хотел бы сделать некий эвристический анализатор, который выберет тот движок, который быстрее отработает регулярное выражение.
Также надо отметить, что новый движок на основе недетерменированного конечного автомата — единственный популярный движок, поддерживающий lookbehind неограниченной длины. Правда для улучшения производительности рекомендуется прямо указывать, какое максимальное количество символов может соответствовать lookbehind подвыражению.
Для выбора конкретного движка можно использовать настройку 'regexpengine' [3] (изменяет используемый движок для всех новых регулярных выражений) или /%#= [4] в начале выражения (изменяет движок для данного выражения).
vim.bindeval [5]. В отличие от vim.eval [6], данная функция возвращает объекты типа vim.Dictionary [7] и vim.List [8], изменение которых также изменяет соответствующую переменную VimL, и vim.Function [9], вызов которых вызывает встроенную функцию Vim, либо пользовательскую функцию, написанную на VimL. vim.eval, числа возвращаются как числа, а не как их строковые представления. Для строк в Python 3 есть существенное отличие между vim.bindeval и vim.eval: новая функция возвращает байтовые строки (bytes()), а старая — юникодные (str()) и может вызвать UnicodeDecodeError. vim.vars [10], buffer [11].vars и window [11].vars, облегчающие доступ к переменным. vim.options [12], buffer [11].options и window [11].options, облегчающие доступ к настройкам. {runtimepath}/python2, {runtimepath}/python3 и {runtimepath}/pythonx не нужно добавлять что‐либо в sys.path: импорт происходит автоматически (если только вы не удалили '_vim_path_' из sys.path или соответствующую функцию из sys.path_hooks). :pydo [15]. vim.window.col и vim.window.row — на текущий момент единственный способ узнать месторасположение окна. dir(vim.*). (указаны измения с версии 7.3.000)
:language [18].if/while/for отдельно от выравнивания аргументов функций.sort().autoselectplus настройки 'clipboard' [36]). Также добавлена возможность сделать системный буфер обмена буфером обмена по‐умолчанию (ранее можно было таким сделать только «мышиный» буфер, который, впрочем, называется основным).gn [37].<slnum>.vim.isbuffer() и vim.iswindow() были заменены на vim.type().map <buffer><nowait> , <Nop> делает затруднительным запуск привязок map ,a A и map ,b B для данного буфера): при использовании аргумента <nowait> [53] Vim перестаёт ожидать следующего символа как только пользователь напечатает все символы, необходимые для запуска привязки с данной настройкой.Автор: ZyXI
Источник [67]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vim/38149
Ссылки в тексте:
[1] объявил: https://groups.google.com/forum/?fromgroups=#!topic/vim_dev/N8jzif4e9L8
[2] :h new-regexp-engine: http://vimhelp.appspot.com/version7.txt.html#new-regexp-engine
[3] 'regexpengine': http://vimhelp.appspot.com/options.txt.html#%27regexpengine%27
[4] /%#=: http://vimhelp.appspot.com/pattern.txt.html#%2F%5C%25%23%3D
[5] vim.bindeval: http://vimhelp.appspot.com/if_pyth.txt.html#python-bindeval
[6] vim.eval: http://vimhelp.appspot.com/if_pyth.txt.html#python-eval
[7] vim.Dictionary: http://vimhelp.appspot.com/if_pyth.txt.html#python-Dictionary
[8] vim.List: http://vimhelp.appspot.com/if_pyth.txt.html#python-List
[9] vim.Function: http://vimhelp.appspot.com/if_pyth.txt.html#python-Function
[10] vim.vars: http://vimhelp.appspot.com/if_pyth.txt.html#python-vars
[11] buffer: http://vimhelp.appspot.com/if_pyth.txt.html#python-buffer
[12] vim.options: http://vimhelp.appspot.com/if_pyth.txt.html#python-options
[13] возможность: http://vimhelp.appspot.com/if_pyth.txt.html#python-tabpage
[14] vim.buffers: http://vimhelp.appspot.com/if_pyth.txt.html#python-buffers
[15] :pydo: http://vimhelp.appspot.com/if_pyth.txt.html#%3Apydo
[16] pyeval(): http://vimhelp.appspot.com/if_pyth.txt.html#python-pyeval
[17] viminfo: http://vimhelp.appspot.com/starting.txt.html#viminfo
[18] :language: http://vimhelp.appspot.com/mlang.txt.html#%3Alanguage
[19] возможность: http://vimhelp.appspot.com/indent.txt.html#cino-N
[20] возможность: http://vimhelp.appspot.com/indent.txt.html#cino-k
[21] сортировки: http://vimhelp.appspot.com/eval.txt.html#sort%28%29
[22] and(): http://vimhelp.appspot.com/eval.txt.html#and%28%29
[23] or(): http://vimhelp.appspot.com/eval.txt.html#or%28%29
[24] invert(): http://vimhelp.appspot.com/eval.txt.html#invert%28%29
[25] xor(): http://vimhelp.appspot.com/eval.txt.html#xor%28%29
[26] InsertCharPre: http://vimhelp.appspot.com/autocmd.txt.html#InsertCharPre
[27] CompleteDone: http://vimhelp.appspot.com/autocmd.txt.html#CompleteDone
[28] GUIFailed: http://vimhelp.appspot.com/autocmd.txt.html#GUIFailed
[29] QuitPre: http://vimhelp.appspot.com/autocmd.txt.html#QuitPre
[30] TextChanged: http://vimhelp.appspot.com/autocmd.txt.html#TextChanged
[31] TextChangedI: http://vimhelp.appspot.com/autocmd.txt.html#TextChangedI
[32] J: http://vimhelp.appspot.com/change.txt.html#J
[33] j: http://vimhelp.appspot.com/change.txt.html#fo-table
[34] 'formatoptions': http://vimhelp.appspot.com/options.txt.html#%27formatoptions%27
[35] удалить: http://vimhelp.appspot.com/sign.txt.html#%3Asign-unplace
[36] 'clipboard': http://vimhelp.appspot.com/options.txt.html#%27clipboard%27
[37] gn: http://vimhelp.appspot.com/visual.txt.html#gn
[38] 'shiftwidth': http://vimhelp.appspot.com/options.txt.html#%27shiftwidth%27
[39] 'tabstop': http://vimhelp.appspot.com/options.txt.html#%27tabstop%27
[40] shiftwidth(): http://vimhelp.appspot.com/eval.txt.html#shiftwidth%28%29
[41] 'softtabstop': http://vimhelp.appspot.com/options.txt.html#%27softtabstop%27
[42] expand(): http://vimhelp.appspot.com/eval.txt.html#expand%28%29
[43] :diffoff: http://vimhelp.appspot.com/diff.txt.html#%3Adiffoff
[44] v:windowid: http://vimhelp.appspot.com/eval.txt.html#v%3Awindowid
[45] char2nr(): http://vimhelp.appspot.com/eval.txt.html#char2nr%28%29
[46] список: http://vimhelp.appspot.com/eval.txt.html#List
[47] luaeval(): http://vimhelp.appspot.com/if_lua.txt.html#lua-luaeval
[48] список: http://vimhelp.appspot.com/if_lua.txt.html#lua-list
[49] словарь: http://vimhelp.appspot.com/if_lua.txt.html#lua-dict
[50] ссылка на функцию: http://vimhelp.appspot.com/if_lua.txt.html#lua-funcref
[51] sha256(): http://vimhelp.appspot.com/eval.txt.html#sha256%28%29
[52] wildmenumode(): http://vimhelp.appspot.com/eval.txt.html#wildmenumode%28%29
[53] <nowait>: http://vimhelp.appspot.com/map.txt.html#%3Amap-nowait
[54] автодополнения: http://vimhelp.appspot.com/map.txt.html#%3Acommand-complete
[55] :behave: http://vimhelp.appspot.com/gui.txt.html#%3Abehave
[56] :cscope: http://vimhelp.appspot.com/if_cscop.txt.html#%3Acscope
[57] 'path': http://vimhelp.appspot.com/options.txt.html#%27path%27
[58] :history: http://vimhelp.appspot.com/cmdline.txt.html#%3Ahistory
[59] :sign: http://vimhelp.appspot.com/sign.txt.html#%3Asign
[60] :syntime: http://vimhelp.appspot.com/syntax.txt.html#%3Asyntime
[61] включения/выключения: http://vimhelp.appspot.com/options.txt.html#%27imactivatefunc%27
[62] получения состояния: http://vimhelp.appspot.com/options.txt.html#%27imstatusfunc%27
[63] 'relativenumber': http://vimhelp.appspot.com/options.txt.html#%27relativenumber%27
[64] 'number': http://vimhelp.appspot.com/options.txt.html#%27number%27
[65] возможность: http://vimhelp.appspot.com/options.txt.html#%27wildignorecase%27
[66] screen*(): http://vimhelp.appspot.com/eval.txt.html#screenattr%28%29
[67] Источник: http://habrahabr.ru/post/185800/
Нажмите здесь для печати.