|
Так уж исторически сложилось, что для написания скриптов на Python я пользовался в основном SciTe. Пробовал когда-то Notepad++ и тому подобные Programmer's Notepad, но особо ими не проникся и в итоге остался на все том же SciTe. Тем более, что особо многого я от редактора и не требую, мне достаточно подсветки кода да возможности запуска скриптов прямо из редактора, а остальные возможности будут - хорошо, нет - обойдусь. Но я давно уже поглядывал в сторону Vim - люблю я такие конструкторы, где все можно под себя настроить с помощью плагинов. Несколько раз пытался на него перейти, но все как-то не срасталось. А недавно в очередной раз установил Vim, начал настраивать его под себя и через день неожиданно понял, что в нем меня все устраивает. Чтобы не забыть что и каким образом настраивал, решил написать эту статью. В дальнейшем я буду приводить скриншоты не Vim, а gVim - Vim в графическом интерфейсе, а не в консольном. Когда настраивал Vim активно пользовался гуглом, поэтому часть настроек подсмотрена на разных сайтах, но обычно даже в найденных участках кода файла настроек что-то подправлял под себя. Будем считать, что вы уже знаете, что такое Vim, что у него есть несколько режимов работы и умеете между ними переключаться. Потому что в этой статье хотелось бы обратить внимание именно на настройки, а не на работу с самим редактором. Настраиваем кодировкиЕсли в только что установленном Vim открыть скрипт в кодировке UTF-8, то, по крайней мере в Windows, мы увидим крокозяблы вместо русских букв: ![]() Чтобы переключить кодировку на правильную UTF-8, вводим команду в командной строке редактора: :e ++enc=utf8 В результате получаем читаемые комментарии на русском языке: ![]() Каждый раз вводить эту команду не интересно, поэтому добавим новый пункт меню, с помощью которого можно будет переключать кодировки Для этого идем в папку, где установлен Vim и ищем файл _vimrc в Windows или .vimrc в linux. В Windows он расположен по адресу X:\Program Files\Vim. Заметьте, что сам (g)Vim расположен по адресу X:\Program Files\Vim\vim72 " Меню выбора кодировки текста (utf8, cp1251, koi8-r, cp866) Как видите, свое меню создавать очень легко. Строка <CR> обозначает нажатие Enter, а комментарии начинаются с двойной кавычки. Теперь мы можем вручную переключать кодировки: ![]() Но вручную переключать кодировки не интересно, поэтому сделаем так, чтобы Vim сам пытался определять нужную кодировку. Для этого достаточно добавить всего одну строку в _vimrc: " Список используемых кодировок для автоматического их определения Параметру fileencodings присваиваем список используемых в повседневной жизни кодировок. Теперь при открытии файла все сразу будет выводиться в правильной кодировке. Теперь нам осталось исправить одно маленькое недоразумение, которое состоит в том, что Vim может не признавать русские буквы за буквы, из-за чего не будут корректно работать команды, связанные с выделением слов (например, перемещение к следующему или предыдущему слову). Исправить это легко. Достаточно в файл _vimrc добавить строку: set iskeyword=@,a-z,A-Z,48-57,_,128-175,192-255 Здесь мы перечисляем какие символы и их коды Vim должен считать за буквы. Диапазон 48-57 соответствует цифрам, 128-175 - части русских букв в кодировке DOS (866), а 192-255 охватывает оставшиеся русские буквы в кодировке DOS и все русские буквы в кодировке Windows-1251. Настраиваем внешний вид редактораВо-первых, включаем нумерацию строк (как же без нумерации жить то?) " Включаем нумерацию строк ![]() Теперь надо сказать несколько слов про установку значений параметров. До этого мы использовали знак '=' вместе с командой set. Но некоторые параметры являются булевыми. Для их установки в значение true нужно написать set param Если нужно отключить опцию (значение false), то нужно написать set noparam То есть в нашем случае, если бы мы хотели отключить нумерацию строк, то нужно было бы написать set nonu Обратите внимание, что после 'no' нет пробела. Включим автоматическую расстановку отступов " Включить автоотступы И подсветку синтаксиса. " Влючить подстветку синтаксиса Обычно по умолчанию она и так включена, но хуже не будет, если включим еще раз. Устанавливаем размеры отступов для отступов и табуляций: " Размер отступов " Размеры табуляций " Более "умные" отступы при вставке их с помощью tab. Теперь открытый исходник выглядит так ![]() Включим использование фолдинга (folding), т.е. сворачивание участков кода " Включаем фолдинг (сворачивание участков кода) " Сворачивание по отступам При открытии файла все участки сразу сворачиваются ![]() На самом деле у fdm (или, полный вариант - foldmethod) есть несколько значений:
Часто для кода вполне подходит сворачивание по отступам, особенно для языка Python. Но можно сделать сворачивание и более умным, когда сворачиваться будут объявления классов, методов и т.п. Для этого устанавливаем другое значение параметра fdm: " Сворачивание по синтаксису Но кроме этого, возможно, придется установить дополнительные плагины для нужных языков. Для Python, например, понадобится плагин python_fold. Чтобы его установить, достаточно скопировать файл python_fold.vim в папку ftplugin. Теперь свернутый код будет выглядеть примерно следующим образом: ![]() Но в то же время для сворачивание кода на Fortran дополнительные плагины не нужны, достаточно в _vimrc добавить следующую переменную: " Включить сворачивание кода для Fortran Для удобства добавим еще один параметр, который будет заставлять Vim разворачивать свертки, когда в них попадает курсор в нормальном режиме: " Автоматическое открытие сверток при заходе в них Следующая опция делает так, чтобы рабочей папкой становилась директория, в которой расположен открытый файл. Это практически обязательная опция для отладки скриптов на Python. "Автоматическое переключение рабочей папки По умолчанию Vim делает файлы бекапа рядом с открытым файлом и свапа в рабочей директории. Не думаю, что они нам понадобятся, поэтому отключим их создание. " Отключить создание файлов бекапа и свапа Теперь облегчим создание нового файла со скриптами на языке Python. " При создании нового файла *.py и *.pyw будут сразу добавлены два заголовка с autocmd BufNewFile *.py call BufNewFile_PY() Ну а теперь сделаем автоматическое закрытие скобок (круглых, квадратных и фигурных). Для этого добавим следующие три строки: " Автоматическое закрытие скобок Суть их очень простая. Команда imap работает в режиме вставки (первая буква i - от слова Insert) и позволяет назначать выполнение команд при нажатии определенных клавиш. Первая строка обозначает, что при нажатии клавиши "[" нужно написать два символа [] и сымитировать нажатие клавиши "влево". То есть при нажатии на клавишу [ вместо открывающейся скобки будет вставлена также и закрывающаяся, а курсор затем переместится на один символ влево, то есть окажется внутри скобок. Аналогично работают и следующие две строки, только для круглых и фигурных скобок соответственно. По умолчанию размер окна Vim довольно небольшой, но мы можем изменить количество строк и столбцов, расположенных в нем, чтобы окно сразу занимало нужный нам размер. Для себя я установил следующие параметры: " размеры окна Это практически на весь экран при разрешении 1280x1024 Если вам не нравится раскраска кода по умолчанию, то ее можно переключать. Шаблоны с раскрасками лежат в папке X:\Program Files\Vim\vim72\colors и (или) X:\Program Files\Vim\vimfiles\colors Самое главное, что вы можете переключать раскраску во время работы, а затем установить ее по умолчанию. Для этого в команднйо строке vim вводим команду, например, :color blue blue - это имя одного из файлов (без расширения) в папке colors. В итоге получим ![]() Я для себя подправил одну из прилагающихся цветовых схем, и раскраска питона у меня выглядит следующим образом: ![]() Чтобы установить ту же цветовую схему blue по умолчанию, в файл _vimrc добавляем строку: color blue или color _имя_понравившейся_вам_цветовой_схемы К данному моменту сразу будет работать и автодополнение (в Vim они называются Omni Completion). Чтобы появились подсказки, нужно в режиме вставки поочередно нажать Ctrl-X, Ctrl-O. Выглядят они следующим образом: ![]() Но чтобы было более привычно, как в других IDE, мы можем сделать так, чтобы Omni Completion появлялся при нажатии комбинации клавиш Ctrl-пробел. Для этого в _vimrc добавим всего одну строчку: " Ctrl-пробел для автодополнения С помощью этой команды мы перенаправляем сочетание клавиш Ctrl-пробел на последовательное нажатие комбинаций клавиш Ctrl-x, Ctrl-o. В принципе, можно было бы воспользоваться уже знакомой нам командой imap, но отличие команды inoremap состоит в том, что при ее использовании, в отличие, от imap, отключается дальнейшие перенаправления клавиш, которые указываются во втором параметре. Теперь можно сделать так, чтобы текущий буфер закрывался с помощью клавиши Ctrl-W. "Ctrl-w - удаление текущего буфера Первая строка изменяет поведение Ctrl-w в нормальном режиме и при нажатии этой комбинации вызывает команду закрытия буфера (:bd) Вторая команда работает аналогично для режима вставки, только предварительно имитирует нажатие клавиши Esc для выхода в нормальный режим, а затем выполняет ту же команду. Vim + PythonДля того, чтобы можно было бы запускать открытый в данный момент скрипт на языке Python, установим плагин runscript. Для этого скачиваем файл с плагином и просто копируем его в папку plugins. Затем открываем плагин в текстовом редакторе и изменяем значение переменной s:PathToExecutable таким образом, чтобы он указывал на путь до интерпретатора Python. У меня, например, это выглядит следующим образом: let s:PathToExecutable = 'c:\python25\python.exe' Теперь для того, чтобы запустить открытый скрипт, нажимаем F12. Если ничего не произошло, нажимаем F9, тогда откроется еще один буфер, куда выводится результат работы скрипта. Перед запуском скрипта нужно не забыть выйти из режима вставки в нормальный режим с помощью клавиши Esc. На следующем скриншоте пример запуска простенького скрипта: ![]() У плагина runscript есть и дополнительные возможности для запуска скриптов, про них вы можете узнать или на странице плагина или в комментариях в самом плагине. Недостатком такого способа запуска скриптов является то, что сообщения об ошибках выводятся вместе с выводом скрипта в тот же буфер, но разбор ошибок не производится, и нельзя, дважду щелкнув на ошибку, сразу перескочить на проблемную строку. После этого будет полезно обновить файл, описывающий синтаксис Python для редактора. Обновленный файл синтаксиса расположен здесь, причем, там же есть и синтаксис для Python 3.0. Скаченный файл нужно скопировать в папку syntax. Кроме того здесь описан способ, с помощью которого можно заставить Vim прямо во время набора текста подсвечивать типичные ошибки вроде забытого символа двоеточия. Для этого в только что скаченном файле находим строки, начинающиеся с syn match pythonError и добавляем после этих строк следующие: syn match pythonError "^\s*def\s\+\w\+(.*)\s*$" display Правда, себе я все-таки закомментарил строку syn match pythonError "^\s*if\s.*[^\:]$" display Потому что из-за нее Vim начинает считать ошибками многострочные логические выражения у оператора if. На следующем скриншоте показан код с забытым символом двоеточия после оператора try: ![]() Учим Vim понимать структуру кодаТеперь научим Vim строить список классов и методов классов в отдельном буфере, чтобы мы могли быстро перемещаться на нужный участок кода. Для этого, во-первых, нам понадобится маленькая программа под названием ctags. Скачать ctags под вашу операционку можно с официального сайта. Скачиваем нужный архив и устанавливаем ее куда нам удобно. Я, например, установил ее в c:\Program Files\ctags Затем скачиваем плагин для Vim под названием taglist Установка этого плагина состоит из нескольких этапов.
let Tlist_Ctags_Cmd='"C:\Program Files\Ctags\ctags.exe"' Естественно, путь до ctags у васдолжен быть свой. Обратите внимание на вложенные двойные кавычки. Это нужно для того, чтобы Windows понял строку C:\Program Files\Ctags\ctags.exe как путь до программы ctags.exe, а не остановился на пробеле в имени папки.
Перезапускаем Vim и теперь можем открыть какой-нибудь исходник. Теперь вводим команду ":TlistToggle". И слева у нас открывается структура нашего исходника: ![]() При двойном щелчке по строке из левого списка мы перескакиваем на соответствующий элемент исходника. Если вам не хочется каждый раз набирать команду ":TlistToggle", то можно повесить выполнение ее какую-нибудь горячую клавишу, например, Ctrl-t. Для этого достаточно добавить следующие строки в файл _vimrc: " Ctrl-T - открыть окно ctags Теперь в нормальном режиме и режиме вставки вы можете открывать или прятать буфер со структурой исходника с помощью клавиши Ctrl-t. Устанавливаем дополнительные плагиныТеперь для большего удобства установим некоторые дополнительные плагины Дерево каталогов в окне VimДля построение дерева каталогов есть очень удобный плагин NERD Tree. Скачиваем архив с плагином и распаковываем его в папку с Vim (в архиве расположены две папки doc и plugin). После этого строим теги для справки. Для этого делаем так, чтобы рабочей папкой стала папка doc и выполняем команду :helptags. Или можно проще независимо от текущей папки выполнить команду :helptags $VIMRUNTIME/doc Теперь вы можете смотреть справку по плагину, выполнив команду :help nerd_tree.txt А если вам не охота ее читать, то скажу, что дерево каталогов открывается с помощью команды :NERDTree Внешний вид дерева показан на следующем скриншоте: ![]() Плагин для удобного закомментаривания кода
:so % После этого Vim что-то делает пару секунд, и плагин установлен. У tComment очень много возможностей, чтобы их посмотреть введите команду :help tComment С помощью этого плагина можно как комментарить строки кода, так и быстро их раскомментаривать. Думаю, что для начала этих настроек должно хватить, но не исключено, что со временем эту статью я еще буду дополнять. В качестве продолжения можно рассматривать статью Полезные плагины для Vim. Пожалуйста, оцените материал
|