(Adjust previous/next navigation + minor manual clean) |
Tag: sourceedit |
||
(37 intermediate revisions by 20 users not shown) | |||
Line 1: | Line 1: | ||
− | {{review}} |
||
{{TipImported |
{{TipImported |
||
|id=1119 |
|id=1119 |
||
Line 9: | Line 8: | ||
|version=6.0 |
|version=6.0 |
||
|rating=121/61 |
|rating=121/61 |
||
− | |category1= |
+ | |category1=Integration |
|category2= |
|category2= |
||
}} |
}} |
||
I use Vim for all text editing, even software development. At one point I stopped using IDEs. One major reason is that Vim can do all the major things I need from IDEs (tabs, file trees, greping, syntax highlighting, indentation, completion, "quickfix"ing, etc). |
I use Vim for all text editing, even software development. At one point I stopped using IDEs. One major reason is that Vim can do all the major things I need from IDEs (tabs, file trees, greping, syntax highlighting, indentation, completion, "quickfix"ing, etc). |
||
+ | ==Vim Plugins== |
||
− | Still Vim needs plugins to do some IDE-like things that aren't built in. |
+ | Still Vim needs plugins to do some IDE-like things that aren't built in. Here are some Vim scripts that make Vim more like an IDE. |
+ | Note: You can use {{script|id=2332|text=pathogen}} to isolate your plugins and make it easier to experiment with new plugins. |
||
− | One thing you might want is the vtreeexplorer {{script|id=184}} plugin, which allows you to have a "file list" in a vertically split window. Another thing worth considering is the minibufexpl {{script|id=159}} plugin, which will allow for tabs of all your files (works really well). |
||
+ | ===Project/Filetree Browsing=== |
||
⚫ | |||
+ | *{{script|id=1658|text=NERDTree}} is a tree explorer plugin for navigating the filesystem. |
||
+ | *{{script|id=184|text=vtreeexplorer}} is a tree based file explorer. |
||
+ | *{{script|id=69|text=project}} gives you a "project" view of files, rather than a straight file system view |
||
+ | *{{script|id=3855|text=ide}} Tracks files status (open/edited/closed/read only) within a project with icons; automatically builds and updates syntax highlight rules based on the project files (C/C++/Java); avoids buffer duplication; see [http://dgomezpr.com/ece/code/ide-vim demo]. |
||
+ | *{{help|netrw}} for information about the explorer distributed with Vim. It does not display files in a tree by default, but can by using the {{help|prefix=no|g:netrw_liststyle}} option. It also offers useful file-sorting options (by date, size, name). |
||
+ | ===Buffer/File Browsing=== |
||
⚫ | |||
+ | *{{script|id=42|text=bufexplorer}} lets you navigate through open buffers |
||
− | For debugger integration, try http://clewn.sourceforge.net/ |
||
+ | *{{script|id=159|text=minibufexpl}} Elegant buffer explorer; takes very little screen space. |
||
+ | *{{script|id=1581|text=lookupfile}} Lookup files using Vim7 ins-completion |
||
+ | *[https://wincent.com/products/command-t/ Command-T plugin], inspired by the "Go to File" window bound to Command-T in TextMate |
||
+ | *{{script|id=521|text=MRU}} access recently opened files. |
||
+ | *[http://www.vim.org/scripts/script.php?script_id=3736 ctrlp] Fuzzy file, buffer, mru, tag, ... finder with regexp support. Written in vim language. Access all the functions with '''ctrl-p''' |
||
+ | *[http://www.vim.org/scripts/script.php?script_id=1984 FuzzyFinder] same as previous. |
||
+ | ===Code Browsing=== |
||
− | ---- |
||
+ | *{{script|id=273|text=taglist}} gives you an outline of the source you're viewing |
||
− | What about refactoring? Say you need to reorder the parameters of a function, which means that all calls to that function must also be reordered. Can Vim do that? |
||
+ | *{{script|id=3465|text=Tagbar}} similar to taglist but can order tags by scope. Recommend for programming languages with classes, e.g. C++, Java, Python. |
||
− | :A quick search turned up the following: |
||
+ | *{{script|id=3221|text=Indexer}} generates tags for all files in project automatically and keeps tags up-to-date. Using ctags. Works well with project plugin or independently. |
||
⚫ | |||
+ | *{{script|id=2368|text=CCTree}} is a Call-Tree Explorer, Cscope based source-code browser, and code flow analyzer. |
||
⚫ | |||
+ | *{{script|id=1729|text=exUtility}} global search, symbol search, tag track...(Like IDE/Source Insight). |
||
⚫ | |||
+ | *{{script|id=152|text=ShowMarks}} visually shows the location of marks. |
||
− | :A more involved search may turn up more. If you find something you like, feel free to add a section to this tip mentioning it. If you still need help, try the vim_use mailing list or the [[Vim on Freenode|#vim channel on Freenode]]. See [[:Vim_Tips_Wiki:Community_Portal#Asking_questions|our advice for asking questions]] for some options. |
||
− | :--[[User:Fritzophrenic|Fritzophrenic]] 15:59, February 24, 2010 (UTC) |
||
+ | See also [[Browsing programs with tags]] and [[Cscope]]. |
||
− | ---- |
||
⚫ | |||
+ | ===Writing Code=== |
||
+ | *A plethora of [[:Category:Automated_Text_Insertion#Related_scripts|code snippet/template plugins]] are available, many offering [[wikipedia:Textmate#Snippets|TextMate]]-like snippet features. |
||
+ | *{{script|id=1879|text=AutoComplPop}} gives you code completion as you type. |
||
+ | *{{script|id=614|text=CRefVim}} A C-reference manual especially designed for Vim. |
||
+ | |||
+ | See also [[Omni completion]] and [[Make Vim completion popup menu work just like in an IDE]]. |
||
+ | |||
+ | ===Vim Functionality=== |
||
+ | *{{script|id=39|text=matchit}} improves % matching |
||
⚫ | |||
+ | *{{script|id=4177|text=undotree}} or {{script|id=3304|text=gundo}} visualizes your undo tree, see [[Using undo branches]]. |
||
+ | *{{script|id=1697|text=surround}} makes it easier to delete/change/add parentheses/quotes/XML-tags/much more. |
||
+ | |||
+ | ===IDE integration=== |
||
+ | You may want to use your IDE for some tasks like debugging, so some integration between Vim and the IDE can be helpful. |
||
+ | *[[Integrate gvim with Visual Studio]] |
||
+ | *[http://eclim.org/ Eclim] brings Eclipse functionality to the Vim editor. |
||
+ | |||
+ | ===Source Control Integration=== |
||
+ | There are many Vim plugins for different source control management systems. Here are a few. |
||
+ | *{{script|id=90|text=vcscommand.vim}} - CVS/SVN/SVK/git/hg/bzr integration plugin |
||
+ | *{{script|id=2975|text=fugitive}} - git integration |
||
+ | *{{script|id=240|text=perforce}} - perforce integration |
||
+ | *{{script|id=3861|text=lawrencium}} - mercurial integration |
||
+ | |||
+ | See also [http://vim.wikia.com/wiki/Category:VersionControl Category:VersionControl] |
||
+ | |||
+ | ==Debugging== |
||
+ | There are several projects to add debugging functionality to vim |
||
+ | *[http://clewn.sourceforge.net/ Clewn] implements full gdb support in the vim editor: breakpoints, watch variables, gdb command completion, assembly windows, etc. |
||
+ | *[http://pyclewn.sourceforge.net/ pyClewn] like clewn but written in python and also supports [https://docs.python.org/2/library/pdb.html pdb]. |
||
+ | *[http://jaredforsyth.com/projects/vim-debug/ vim-debug], which creates an integrated debugging environment in VIM. |
||
+ | *{{script|id=84|text= gdbvim}} plugin: Watch in vim what you debug in gdb. And more. |
||
+ | |||
+ | ==Refactoring== |
||
⚫ | |||
⚫ | |||
⚫ | |||
+ | |||
⚫ | |||
⚫ | |||
---- |
---- |
||
+ | Code navigation in vi offers much more than a standard IDE, because of the ability to execute the desired combination of commands. Generate an index much more rapidly than an IDE with a heavy GUI interface: |
||
+ | |||
+ | For example, one can take advantage of the tag stack: |
||
+ | |||
+ | For C++, follow the instructions: [http://design.liberta.co.za/articles/code-completion-intellisense-for-cpp-in-vim-with-omnicppcomplete/ on using OmniCpp] |
||
+ | Define a custom .ctags file |
||
+ | :--c++-kinds=+p |
||
+ | :--fields=+iaS |
||
+ | :--extra=+q |
||
+ | :--language-force=C++ |
||
+ | |||
+ | From a console (the exclude options may vary) generate the tags file as follows: |
||
+ | <pre> |
||
+ | ctags --exclude=.svn --exclude=target -R . |
||
+ | </pre> |
Revision as of 16:07, 23 May 2015
created 2006 · complexity intermediate · author Matt Zyzik · version 6.0
I use Vim for all text editing, even software development. At one point I stopped using IDEs. One major reason is that Vim can do all the major things I need from IDEs (tabs, file trees, greping, syntax highlighting, indentation, completion, "quickfix"ing, etc).
Vim Plugins
Still Vim needs plugins to do some IDE-like things that aren't built in. Here are some Vim scripts that make Vim more like an IDE.
Note: You can use pathogen to isolate your plugins and make it easier to experiment with new plugins.
Project/Filetree Browsing
- NERDTree is a tree explorer plugin for navigating the filesystem.
- vtreeexplorer is a tree based file explorer.
- project gives you a "project" view of files, rather than a straight file system view
- ide Tracks files status (open/edited/closed/read only) within a project with icons; automatically builds and updates syntax highlight rules based on the project files (C/C++/Java); avoids buffer duplication; see demo.
- :help netrw for information about the explorer distributed with Vim. It does not display files in a tree by default, but can by using the g:netrw_liststyle option. It also offers useful file-sorting options (by date, size, name).
Buffer/File Browsing
- bufexplorer lets you navigate through open buffers
- minibufexpl Elegant buffer explorer; takes very little screen space.
- lookupfile Lookup files using Vim7 ins-completion
- Command-T plugin, inspired by the "Go to File" window bound to Command-T in TextMate
- MRU access recently opened files.
- ctrlp Fuzzy file, buffer, mru, tag, ... finder with regexp support. Written in vim language. Access all the functions with ctrl-p
- FuzzyFinder same as previous.
Code Browsing
- taglist gives you an outline of the source you're viewing
- Tagbar similar to taglist but can order tags by scope. Recommend for programming languages with classes, e.g. C++, Java, Python.
- Indexer generates tags for all files in project automatically and keeps tags up-to-date. Using ctags. Works well with project plugin or independently.
- CCTree is a Call-Tree Explorer, Cscope based source-code browser, and code flow analyzer.
- exUtility global search, symbol search, tag track...(Like IDE/Source Insight).
- ShowMarks visually shows the location of marks.
See also Browsing programs with tags and Cscope.
Writing Code
- A plethora of code snippet/template plugins are available, many offering TextMate-like snippet features.
- AutoComplPop gives you code completion as you type.
- CRefVim A C-reference manual especially designed for Vim.
See also Omni completion and Make Vim completion popup menu work just like in an IDE.
Vim Functionality
- matchit improves % matching
- bufkill allows you to delete a buffer without actually closing the window.
- undotree or gundo visualizes your undo tree, see Using undo branches.
- surround makes it easier to delete/change/add parentheses/quotes/XML-tags/much more.
IDE integration
You may want to use your IDE for some tasks like debugging, so some integration between Vim and the IDE can be helpful.
- Integrate gvim with Visual Studio
- Eclim brings Eclipse functionality to the Vim editor.
Source Control Integration
There are many Vim plugins for different source control management systems. Here are a few.
- vcscommand.vim - CVS/SVN/SVK/git/hg/bzr integration plugin
- fugitive - git integration
- perforce - perforce integration
- lawrencium - mercurial integration
See also Category:VersionControl
Debugging
There are several projects to add debugging functionality to vim
- Clewn implements full gdb support in the vim editor: breakpoints, watch variables, gdb command completion, assembly windows, etc.
- pyClewn like clewn but written in python and also supports pdb.
- vim-debug, which creates an integrated debugging environment in VIM.
- gdbvim plugin: Watch in vim what you debug in gdb. And more.
Refactoring
Comments
When using Visual Studio, see ViEmu.
Code navigation in vi offers much more than a standard IDE, because of the ability to execute the desired combination of commands. Generate an index much more rapidly than an IDE with a heavy GUI interface:
For example, one can take advantage of the tag stack:
For C++, follow the instructions: on using OmniCpp Define a custom .ctags file
- --c++-kinds=+p
- --fields=+iaS
- --extra=+q
- --language-force=C++
From a console (the exclude options may vary) generate the tags file as follows:
ctags --exclude=.svn --exclude=target -R .