Редактор Vim очень умный? - PullRequest
       9

Редактор Vim очень умный?

10 голосов
/ 19 сентября 2009

Я программирую на C ++ или Java. Поэтому я хочу использовать редактор Vim, потому что он очень гибкий. Я слышал, что я могу настроить редактор Vim так, чтобы он мог работать

  1. от объекта к определению
  2. от функции к определению
  3. от имени класса до определения

Есть ли у нас какой-нибудь профессиональный Vim-эр, который мог бы точно сказать мне, как настроить Vim для этого? Заранее спасибо.

P.S. Если читатели сочтут, что этот вопрос не связан с программированием, я бы сказал, что это повышает скорость программирования. Так что это помощь программисту. Поэтому, пожалуйста, не закрывайте этот вопрос.

РЕДАКТИРОВАТЬ: Также я хотел бы знать, как vim работает с завершением кода и может ли vim намекнуть список методов, которые доступны для определенного объекта? Если да, то я бы тоже хотел узнать, как настроить эти параметры?

Ответы [ 8 ]

12 голосов
/ 19 сентября 2009

Что вам нужно, так это ctags и tags / TAGS файлы. Ctags (я рекомендую Exuberant Ctags) - это программа, которая сканирует исходные файлы на наличие идентификаторов и создает файл для их индексации. Затем вы можете использовать ^], чтобы перейти к определению тега под курсором.

Может потребоваться дополнительная информация, чтобы сообщить vim, как найти файл тегов; Я не уверен, что они не так. Но это общая идея - запустите ctags над вашим исходным кодом, а затем используйте ^].

Кроме того, вы можете посмотреть на GNU Global. Это немного сложнее. Но ctags выполнит то, что вы описали.

2 голосов
/ 16 апреля 2010

В прошлый раз, когда я проверял, давным-давно, ctags был в порядке, но он пропустил некоторые идентификаторы, а cscope имел более исчерпывающую опцию поиска, но все равно пропустил некоторые идентификаторы.

grep это то, что я предпочитаю. Это исчерпывающе, но все же довольно быстро, если база исходного кода имеет приемлемый размер или ПК работает быстро. Вы можете вызвать его из vim с помощью :grep. Вот упрощенная версия моей собственной _vimrc, чтобы показать, как я ее настроил. Я помещаю комментарии, чтобы объяснить, какие ключи делают.

" for Windows, replace with the location of `grep.exe'
" not needed for Unix/Linux
:set grepprg=c:\prog\cygwin\bin\grep.exe\ -n\ $*\ /dev/null


:function! RecursiveSearchIdentifierUnderCursor()
:   sp
:   let grep_cmd = "silent grep -r \"\\<" . expand("<cword>") . "\\>\" *"
:   exe grep_cmd
:endfunction


" CTRL-backslash to search for the identifier (or "word") under the cursor
"
" an identifier is in the form "xxx_123_yyy" but something in the form
" "xxx_123_yyy.aaa_999" would be two identifiers separated by a period
"
"
" this basically executes:
"
"       :grep -r "\<identifier\>" *
"
" for whatever `identifier' the cursor happens to be over
"
"
" to close the newly opened window, use:
"
"       :q
"
:map <C-\> :call RecursiveSearchIdentifierUnderCursor()<CR>


" cursor up/down to move to the previous/next search result
:map <Up> :cp<CR>zz
:map <Down> :cn<CR>zz


" jump up/down between horizontally split windows
:map <PageUp> <C-W>k
:map <PageDown> <C-W>j


" move to the previous/next enclosing brace
:map <Left> [{
:map <Right> ]}


" move to the previous/next enclosing parenthesis
:map <Home> [(
:map <End> ])


" move to the previous/next enclosing # preprocessor directive
:map <Insert> [#
:map <Del> ]#

Кроме того, не забудьте * (SHIFT-8) и # (SHIFT-3) для поиска вперед и назад текущего идентификатора под курсором в текущем файле. Я нашел их неоценимыми при переходе по коду, особенно при поиске коротких имен переменных, таких как 'i' и 'j', которые в противном случае соответствовали бы частям других имен переменных в слепом поиске в обычном текстовом редакторе.

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

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

2 голосов
/ 21 сентября 2009

Использование ctags - определенно место для начала, но не забудьте cscope. В обоих случаях у вас сначала есть cscope и ctags сканируют ваши исходные файлы и создают свои базы данных перед запуском vim. Вам также необходимо периодически обновлять базы данных по мере роста и изменения кода.

С помощью ctags просто используйте команду "ctags" в каталоге кода. Если у вас есть иерархия каталогов, начните сверху и используйте «ctags -R» для просмотра всех каталогов, указанных ниже. Запустите vim в том же каталоге, что и полученный файл тегов, и vim должен найти и загрузить его автоматически. Когда в редакторе курсор находится на имени функции или переменной, вы можете набрать '^]', и vim должен перейти к определению.

Аналогично, для cscope используйте «cscope -b» или «cscope -b -R», чтобы получить более подробную информацию о тегах. Vim и cscope работают вместе, чтобы предоставить вам гораздо больше информации, например, где используется идентификатор и откуда вызывается функция. Существует набор макросов, которые можно использовать для доступа к информации. Макросы и их значения можно найти в справочной информации vim cscope.

2 голосов
/ 19 сентября 2009

Vim, без тени сомнения, лучший редактор в мире. Помимо пламенных войн, я обнаружил, что невероятно полезным для программирования на C ++ и Java является затмение (лучшая IDE в мире, да, сейчас я использую Netbeans) с плагином vrapper. Вы получаете все преимущества полностью интегрированной среды разработки и мощные сочетания клавиш vim.

Vrapper не дает вам полной эмуляции vim, но вы можете перемещаться по коду, используя ярлыки vim, и вы не теряете ничего хорошего от затмения.

1 голос
/ 20 сентября 2009

Как уже говорили другие, вам нужно сгенерировать индексный файл для vi (m).

Я просто хочу сказать, что использование vim для программирования Java вместо современной IDE похоже на использование vim плюс калькулятор вместо электронной таблицы для чисел. Оба хороши для небольших задач, но при увеличении масштаба вы достигаете точки, когда электронная таблица просто оставляет текстовый редактор позади.

Если вы занимаетесь программированием на языке Java, сделайте себе и своему работодателю услугу и научитесь использовать электроинструмент.

1 голос
/ 19 сентября 2009

ctags в целом является ответом, как сказал Майкл Э. ctags *.c *.h - это простой запуск проекта, в котором все файлы находятся в одном каталоге. Затем, как сказал Майкл, вы можете использовать ^], чтобы перейти к определению, и ^ T, чтобы вернуться туда, откуда вы пришли. Это те же самые клавиши, которые вы используете для перемещения по справке Vim.

В Java и C ++ у вас может быть несколько методов с одинаковыми именами. :tn перейдет к следующему, а :ts перечислит альтернативы.

Для завершения кода в Vim я обычно использую ^ P и ^ N. Он не чувствителен к контексту, как эквивалент в Eclipse или MSVC, но обычно выполняет свою работу.

Другие инструменты, которые вы могли бы рассмотреть, это cscope и (конечно) Emacs или Eclipse.

1 голос
/ 19 сентября 2009

Завершение кода в vim доступно как vim-scripts: http://www.vim.org/scripts/index.php

0 голосов
/ 19 сентября 2009

Да, инструмент, который предоставляет этот индекс символа, называется ctags, и многие редакторы Unix могут использовать его.vim хорош в командной строке, но я бы посоветовал потратить немного времени на привыкание к KATE.Это очень хороший, современный графический редактор, с IDE-подобным просмотром файлов, хорошей подсветкой синтаксиса, самой красивой динамической переносом слов, которую я когда-либо использовал, и т. Д. Однако для java затмение и netbeans, вероятно, стоит посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...