А для чего нужны табы, буферы и иже с ними? У меня в vim'е как правило открыто два буфера разделённых по вертикали соответствующим сплитом. В одном я что-то пишу, в другом что-то смотрю (ну… примерно так). Нужен другой файл, закрываю этот и открываю другой. Время открытия файла пренебрежимо мало.
ИМХО буферы были нужны тогда, когда не было окон и табов. Сейчас они есть. Буфера ИМХО нужны иногда только для вспомогательных целей в скриптах. Хотя я скрипты для вима не пишу особо - лень, в сети их полно.
По теме - ИМХО вопрос некорректный: какие тебе нужны плагины, те и качай. Или vim твоя первая IDE?
я сейчас у себя посмотрел - у меня и плагинов-то особых нет, в конфигах что-то такое страшное, найденное непонятно где. В принципе для IDE и плагинов-то особых не нужно, есть какой-то мутный скрипт, который собирает Makefile, и ещё умеет показывать окно с ошибками, и по этим ошибкам прыгать. Но я так думаю, что можно нагуглить и получше что-нибудь. Для остального вроде и встроенных средств хватает. Ну уж на первое время - точно. Лично мне нравится возможность выхода по F10, сохранение по F2, и прочие такие мелочи. Но это всё в .vimrc делается. Я как делал: пробовал фичу, и если мне она нравится, настраивал хоткеи к ней, а надобность в плагинах сейчас отпала ИМХО, всё встроено. Только комбинации клавиш порой зубодробительные.
и да, юзаю vim с тех пор, как появилось KDE4. KDE4-то появилось, а вот kDevelop4 можно сказать что и не появился - точнее сам он был, но там 90% нужных мне фич не работало. В итоге решил освоить vim, и не жалею. Было это года 2..3 назад.
пользуюсь на достаточно примитивном уровне, никакого продвинутого буферизма, практически только сплиты, очень редко табы. пытался расти над собой, но становится неудобно.
Я использую vi(m) уже почти десяти лет. В свое время, ставил разные плагины, сейчас же пришел к тому, что использую почти стандартный вариант.
Подумай, так ли нужно делать из vim полноценную IDE? Вот интересная статья - The Dark Side of Usability. (ссылка) Если кратко: провели ряд экспериментов, в которых двум группам людей предлагалось решить одну и ту же задачу, но с использованием дополнительных инструментов с подсказками и без них. В результате, время решения задачи было одинаковым, но «подопытные» без доп. инструментов делали меньше ненужных движений и больше концентрировались на стратегии решении задачи.
Так ли нужно пихать в IDE или в VIM то, что уже есть в твоей операционной системе? Есть целая серия статьей: Unix as IDE (ссылка), где предлагается следующая база:
File and project management — ls, find, grep/ack, bash Text editor and editing tools — vim, awk, sort, column Build tools — make Debugger — gdb, valgrind, ltrace, lsof, pmap Version control — diff, patch, svn, git
Конечно, необязательно именно такой расклад. Я еще использую screen, fish, mercurial, tmux и всякие языкозависимые вещи, вроде maven и virtualenv.
Что касается всяких сплитов, то зачем они тебе, если ты и так в XMonad`е сидишь?
Unix as IDE, где предлагается следующая база: File and project management — ls, find, grep/ack, bash Text editor and editing tools — vim, awk, sort, column
Для удобной навигации по коду большого проекта все это не подходит, т.к. ничего не знает про семантику языка программирования и работает с кодом как с обычным текстом.
двум группам людей предлагалось решить одну и ту же задачу
Надо было этим двум группам предложить найти и пофиксить баг в большом проекте, у которого почти нет документации по коду. А писать hello world задачи можно где угодно.
Сплиты к копипасту имеют весьма косвенное отношение.
К примеру,
[yy][:edit /path/to/file][p][:w][bp]
Где тут сплиты? ;)
Если же говорить о копировании в рамках двух и более инстансов vim`а, то тут тоже тысяча разных способов. Можно копировать в буффер иксов, если Vim собран с опцией +clipboard.
Самый простой способ скопировать код между друмя разными инстансамы vim`а:
Для удобной навигации по коду большого проекта все это не подходит,
В Гугле, к примеру, много кто использует (vim+grep+find). Причем это добровольный выбор ;) Лично вам может и не подходит. (При этом надо отметить, что это ни коим образом негативно не характиризует вас).
Надо было этим двум группам предложить найти и пофиксить баг в большом проекте, у которого почти нет документации по коду
Документация - это вообще отдельный разговор. Иногда читаешь ее и думаешь - лучше бы вообще ее не было...
На самом деле, к вопросу VIM vs MSVS/Eclipse/унд зо вайтер... сказано не мало и немало холиваров было на эту тему. Нету желания устраивать еще один.
Мне нужен редактор, который умеет строить адекватную модель кода и инкрементально перестраивать ее по мере изменений в файлах. Если бы такая возможность была в Emacs/Vim/..., тогда я бы стал рассматривать аргумент за Unix as IDE как серьезный.
Это палка о двух концах: на одном конце - рефакторинг и навигация по коду, на другом - мощный инструмент для работы с текстом.
Т.е. если говорить прямо, то да, навигация по коду в Vim`е отсутствует как класс. Некоторые этого не понимают, пытаются сделать из Vim`а IDE, тащат туда десяток плагинов, а потом кричат, что все тормозит-глючит-не-работает. Это в лучшем случае, а есть и такие, кто потом говорит, что из Vim`а можно сделать студию. Как выразился один из героев нашего времени: «Это... это - печально».
Но все вышесказанное не отменяет того факта, что vi(m) - прекрасный, полностью управляемый клавиатурой, программируемый инструмент, который позволяет комфортно писать и редактировать код, что я делаю чаще чем смотрю на тип того или иного метода.
Да, IDE позволяет все опечатки (и некоторое количество ошибок) показывать в реальном времени, но все эти подсказки уводят программиста в другой, затратный по времени, метод работы с архитектурой и кодом. Выигрывая тактически, проигрываешь стратегически. А чем и была речь в статьей на которую я ссылался (не про unix). Об этом же говорит, даже(!) Чарльз Петцольд в Does Visual Studio Rot The Mind?.
Что касается, «Unix as IDE», я не понимаю, почему вы не посмотрели на контекст, в котором я привел ссылку на эту статью. Во-первых, «Unix as IDE», а не «Unix is an IDE too», во вторых, я говорил «да не делай из Vim`а IDE» == не надо пихать в Vim кучу плагинов и делать из нее студию, что невозможно.
Казалось бы причем тут исправление опечаток и навигация по коду, f так же воспоминания о зелености травы от дот нет евангелиста. Впрочем даже он понимает что кроме мат задачек на полчаса писать чтото в нотпаде бессмысленно.
основной стержень - thunar / mc / bash + vimserver + tabs + сессии
сами настройки занимают чуть больше 100 строк
все плуги (аж 4) пихнул в .vimrc, а именно: - nerdcommenter - buffer explorer (отлично работает с табами) - nerdtree (почти не пользуюе пользуюсь) - surround (вообще не пользуюсь)
А есть какие-то настройки связанные с nerdcommenter'ом и buffer explorer'ом? А то заставить нормально работать nerdcommenter у меня так и не получилось. Уже не помню почему.
ещё один модуль - ToggleComment, вот его пользую больше всех,
а nerdcommenter использую дефолтный и только для «sexy comments», это типа таких
/*
* comment
*/
вот конфиг без плугов
set nocp
syntax off
colorscheme default
set wildmenu
set mouse=a "- mouse scroll
set ignorecase
set smartcase
set hls
noh
set laststatus=2 "- always show status line
let mapleader=','
set foldmethod=marker
"- custom command line
set stl=%f\ %m\ %r\ line:%l/%L(%p%%)\ col:%c\ buf:%n\ (%b)(0x%B)
set showcmd "- show current command
set autochdir
set visualbell
set virtualedit=all "- move cursor enywhere
set number "- line numbering
set cursorline "- highlignt current line
"- tab=2 + replace_it_with_spaces
set tabstop=2
set expandtab
set shiftwidth=2
set guioptions-=T "-turn off toolbar in gui
"set guioptions-=M "-turn off menubar in gui
set showtabline=2 "- 0-never, 1-if at least 2 tabs, 2-always
set tabpagemax=30
set scrolloff=8 "-leave 4 lines above and beyond cursor while scrolling
set lazyredraw "-dont update screen while macro running
set backup
set backupdir=~/vim-backups//
set directory=~/vim-swaps//
autocmd BufWritePre * let &bex = '--' . strftime("%Y-%m-%d-%H%M%S")
"set guifont=Lucida_Console:h8 "-for windows
"set guifont=Liberation\ Mono\ 8 "-for linux
set guifont=Liberation\ Mono\ Bold\ 8
map <Tab> :tabnext<Enter>
map <S-Tab> :tabprev<Enter>
map o o<Esc>
map O O<Esc>
map S i <Right><Esc>
map s i<Enter><Esc>
map j gj
map k gk
map U <C-u>
map D <C-d>
map - $
map # %
imap <C-j> <Down>
imap <C-k> <Up>
imap <C-h> <Left>
imap <C-l> <Right>
map <S-c> :call CommentLineToEnd('//')<CR> "- ToggleComment
map <leader>l :BufExplorer<CR>
map <leader>t :NERDTreeToggle<CR>
let g:NERDTreeWinSize = 40