vim

NeoVim представляет из себя форк текстового редактора Vim с новыми улучшениями. Основной упор сейчас делается на улучшение кодовой базы. Иными словами команда, которая работает над кодом производит его рефакторинг и покрытие тестами, что несомненно упростит процесс написания и применения новых патчей.

Улучшение кодовой базы уже дает свои корни, произошло улучшение поддержки графической подсистемы, добавлен эмулятор терминала. Сейчас редактор можно интегрировать куда угодно. Вот небольшой список уже готовых проектов реализующих GUI для NeoVim:

GUI написанный на Coffee Script (с использованием Atom Shell UI)

https://github.com/coolwanglu/neovim.as

GUI для OSX

https://github.com/rogual/neovim-dot-app

Rust IDE

https://github.com/oakes/SolidOak

Встроенная поддержка терминала

Да, в NeoVim теперь встроена полноценная консоль, в которой можно запустить (внимание!) другой вим (сделано это лишь ради демонстрации):

Так как моим основным языком является Python, в соседнем буфере я теперь могу запустить IPython:

И кроме этого сделав set filetype=python у меня появится подсветка синтаксиса Python непосредственно в терминале!

Можно с легкостью скопировать текст кода из одного буфера в буфер консоли. Небольшая демонстрация:

Во многих текстовых редакторах для программистов я замечал очень удобную функцию автоматического добавления ключевого слова end, когда вы объявляете функцию, класс и т.д.

Для себя я решил реализовать в VIM, так как из-за одной функции отказываться от этого редактора я не хочу. Не долго копаясь в дебрях сети нашел интересное расширение, которое реализует данную функцию. Расширение называется endwise, его можно скачать по ссылке http://www.vim.org/scripts/script.php?script_id=2386

Скачайте файл endwise.vim и скопируйте в директорию ~/.vim/plugin. После того как вы запустите редактор и установите тип файла ruby (set filetype=ruby) расширение само заработает.

Кстати, для рубистов ширину отступов предлагается устанавливать в 2 пробела. Это реализуется очень легко одной строчкой:
au FileType ruby set shiftwidth=2
Данная строчка принимает отступы в два пробела только для Ruby файлов.

Посмотрите на скриншот ниже. Тут два варианта, первый стандартный в vim, второй перенастроенный. Когда пишешь код, иногда ошибаешься или забываешь закрыть скобку, тег. VIM начинает подсвечивать красным скобку которую мы не закрыли. Это конечно удобно, но мне не приятно, когда подсвечивается красным целая скобка. Красивее будет если ошибка будет подчеркиваться красной волнистой линией как в других редакторах.

Вот строчка, которая это реализует стандартными средствами vim:

hi Error guifg=NONE guibg=NONE gui=undercurl ctermfg=white ctermbg=red cterm=NONE guisp=#FF6C60

Добавьте ее в vimrc или в свою любимую цветовую схему.

В Textmate и Textmate-подобных редакторах есть комбинация, которая может поднимать и опускать строку, на которой находится курсор. Для реализации данной функции в vim можно использовать такие команды:

Поднимает строку под курсором вверх
ddp
Поднимаем строку под курсором вниз
ddkP

Согласитесь, команды немного длинные, поэтому вводить их вручную утомительно. Для этого можно привязать их к комбинациям клавиатуры:
{syntaxhighlighter brush=bash}
map ddp
map ddkP
{/syntaxhighlighter}
Пропишите данные команды в .vimrc, после чего перезапустите редактор. Теперь по комбинации Ctrl+Shift+вверх(вниз) можно поднимать и опускать строку под курсором.

Перемещение текущего символа вперед:
xp

Перемещение текущей строки вниз:
ddp

Перемещение текущей строки вверх:
ddkP

Переместить текущее слово вперед:

dawwP
dawelp
"xdiwdwep"xp

Переместить текущее слово назад:
dawbP

Вот сегодня наконец нашел время и добавил некоторый функционал, который мне не хватал в редакторе.

Более красивая подсветка синтаксиса bespin
Немного подправил уже готовую тему bespin, добавил еще цветов.

Сессии
Добавил сессии, при перезапуске редактора все открытые буферы, расположение окна, размеры окна восстанавливаются.

Добавлены плагины
NERDTree
BufExplorer
taglist
minibufexplorer
snipMate
Gundo
ZenCoding
indent-guides
surroud

Установка:
sudo apt-get install vim-gtk curl exuberant-ctags
cd ~
git clone https://github.com/aliev/.vim.git
echo "source ~/.vim/vimrc" > .vimrc
mkdir ~/tmp
mkdir ~/tmp/bac
mkdir ~/tmp/swp
mkdir ~/tmp/undo

Во многих текстовых редакторах после закрытия окна редактора при последующем запуске расположение и размеры окна запоминается. В виме данная возможность отсутствует, но ее можно добавить нехитрым способом.

В vim есть уникальная опция - сессии. Сессии позволяют сохранять в vim файл и загружать из него все последнии проведенные изменения в редакторе (открытые буферы, файлы, настройки итд).

Вот три строчки кода, которые сохраняют размер окна и расположение его на мониторе и записывают в vim файл, после перезагрузки редактора сессия восстанавливается:

set sessionoptions+=resize,winpos
autocmd VIMEnter * :source ~/tmp/session.vim
autocmd VIMLeave * :mksession! ~/tmp/session.vim

Я думаю многим пригодится. Очень интересные скринкасты от Derek Wyatt. Предупреждаю что тут нет основ работы с vim-ом.

Линк http://vimeo.com/user1690209/videos

vim server это встроенная возможность вима, которая позволяет отправлять, принимать команды и исполнять их. К примеру запустив vim в одном терминале, вы можете спокойно набирать команды в другом терминале, и отправлять файл/команду в вим на другом терминале. Для того что бы vim стал работать в режиме сервера запустим такую команду:

{syntaxhighlighter bash}
vim --servername WORK
{/syntaxhighlighter}
где WORK это любое имя.

RSS-материал