A VIM syntax plugin for Delphi Pascal and Delphi Form files.
See also doc/delphi.txt for detailed documentation.
It is recommended to use a plugin manager for Vim plugins. If you prefer vim-plug as well, put this lines into your plugin list:
Plug 'skywind3000/asyncrun.vim' " For async make
Plug 'Shougo/neosnippet' " For snippet support
Plug 'godlygeek/tabular', " For aligning
Plug 'mattia72/vim-delphi'
*.pas, *.dfm and *.fmx files are recognized automatically:
The following commands are defined:
- :DelphiMake [{project}]
searches {project} in the path and calls :make! /p:config=|g:delphi_build_config| {project} without argument, it tries to find a *.dproj file in the current directory and then upwards It works async if |skywind3000/asyncrun.vim| is installed. - :DelphiMakeRecent [{project}]
same as DelphiMake, but full path of the given {project} will be stored in the variable |g:delphi_recent_project|. Without any argument |g:delphi_recent_project| will be built. On first run the project name will be asked, then searched in the |path|. It works async if |skywind3000/asyncrun.vim| is installed. - :DelphiBuildConfig [{config}]
Debug or Release - :DelphiOpenInDevEnv [{file}]
Opens a file in the default external pascal editor. It is usually the Delphi Develpment Environment. Without argument, the current file is used. - :DelphiSwitchToDfm or :DelphiSwitchToPas
Switch between dfm and pas files. Note: Both command works with dfm and pas files too.
The plugin provides some useful mapping definition also.
Common mappings for *.dfm and *.pas files (defined in ftplugin/common.vim):
<leader>sd Switch to *.dfm
<leader>sp Switch to *.pas
<F12> Switch between *dfm and *.pas
Mappings for *.pas files only (defined in plugin/delphi.vim):
vif Select all in a block (works only if *foldmethod* is 'syntax')
vaf Select a whole block (works only if *foldmethod* is 'syntax')
<F7> Save all and make
Edit helpers for *.pas files
<leader>t= Align selected assignes in nice columns with Tabularize
<leader>t: Align selected declarations in nice columns with Tabularize
<leader>dt Retab current line or selection
<leader>d; Put ';' to the end of line
Jumpings in *.pas files
<leader>dU Jump to the first 'uses' clause in file
<leader>du Jump to the second 'uses' clause in file
<leader>di Jump to the 'implementation' section
<leader>df Jump to the 'interface' section
<leader>dv Jump to the previous 'var' section
<leader>db Jump to the previous 'begin'
<leader>de Jump to the next 'end'
b:match_words
contains matching words to jump between words with %
.
Such words are, eg.
- "begin", "end"
- "repeat", "until"
- "try", "finally"
- "unit", "interface", "implementation", "end."
and so on.
Indentation works well (in most cases :))
- Select the lines you wan't to indent. (eg. with
V%
on a "begin" keyword) - Push
=
To format lines, that assigns values like this: variable := value;
, we can use the
tabular plugin. vim-delphi maps the appropriate
commands for you.
<leader>t=
helps you line up assignments by aligning to:=
on each line.<leader>t:
helps you line up declarations by aligning to:
on each line.
For this feature you need to install neosnippet.
The snippet file should loaded automatically, if not, you can load it by:
:NeoSnippetSource <path_to_the_vim-delphi_plugin>\snippets\delphi.snip
Then you can start type a snippet alias eg. func
.
C-k
selects and expands a snippet from the neocomplcache/ neocomplete popup (UseC-n
andC-p
to select it).C-k
can be used to jump to the next field in the snippet.Tab
to select the next field to fill in the snippet.
Available snippets are in the snippets directory. Feel free to extend them.
- for this indent script howto: http://psy.swansea.ac.uk/staff/Carter/Vim/vim_indent.htm