Vim: Difference between revisions
(Correcting 'now' to 'know' in the summary.) |
(edit editor does not work in 3.8.0. EDITOR() function does.) |
||
Line 21: | Line 21: | ||
edit home . | edit home . | ||
edit editor 'vim > /dev/tty 2>&1 < /dev/tty %s' | edit editor 'vim > /dev/tty 2>&1 < /dev/tty %s' | ||
In version 3.8.0, editor option for edit is gone. In stead use the following: | |||
edit mode sync | |||
edit home . | |||
EDITOR('vim > /dev/tty 2>&1 < /dev/tty %s') | |||
== A better GNU Octave syntax file == | == A better GNU Octave syntax file == |
Revision as of 02:17, 9 January 2014
Vim the editor is one of the most famous text editors in the hacker programming universe. It has a plenty of extensible (script-based) capabilities and very comfortable shortcuts that makes the programmer the fastest gun of the old west. (I can imagine Vim in front of Emacs on a desert city, Vim's shot is much faster!). In this page you'll learn some tips to better adapt Vim for GNU Octave programming.
If you aren't familiar with Vim script language, you can also use Python to write Vim plugins. If you do some for GNU Octave, please let us know.
Vim as the default editor
To set Vim as the default editor launched by the GNU Octave edit
command, add the following line to your ~/.octaverc file:
edit mode async
and one of the following:
edit editor "<terminal> -e 'vim %s'"
edit editor "gvim %s"
where <terminal>
can be gnome-terminal, xterm, or any other terminal of your preference. Please note the -e
option is common to the mentioned terminals, change it if necessary.
To use Vim as default editor without starting a separate window, add the following lines to your ~/.octaverc file:
edit mode sync edit home . edit editor 'vim > /dev/tty 2>&1 < /dev/tty %s'
In version 3.8.0, editor option for edit is gone. In stead use the following:
edit mode sync edit home . EDITOR('vim > /dev/tty 2>&1 < /dev/tty %s')
A better GNU Octave syntax file
As for now, Vim hasn't a dedicated, officially distributed filetype for GNU Octave. The community agreed the best solution is to use octave.vim by Rik. All the instructions for installing it can be found on the hyperlink.
Accessing GNU Octave info
GNU Octave info package can be found in almost all Linux distributions. For installing it under Ubuntu, you can type:
$ sudo apt-get install octave<version>-info
where <version>
must be substituted by the appropriate string. Add the following line to your ~/.vimrc file:
autocmd FileType matlab setlocal keywordprg=info\ octave\ --vi-keys\ --index-search
Now, when editing a *.m file, you can type K in normal mode and the word under the cursor will be searched for in the GNU Octave documentation index. Pressing , yields the next occurrence. However, this does not work when using gVim, because gVim has only dumb terminal implemented. When using vim in some not dumb terminal, all works fine.
OBS: If using the Rik's octave.vim syntax, replace matlab
by octave
.
Jumping between control statements
GNU Octave has a richer set of closing tags (endif
,endfor
,...) but for compatibility with MATLAB most users avoid them. This sometimes makes the code hard to follow and one possible workaround is to enable the matchit.vim plugin for jump between matching control statements. Although the plugin is distributed with Vim, it's disabled by default (see :help matchit-install
). To enable it, add the following lines to your ~/.vimrc file:
set nocompatible filetype plugin on runtime macros/matchit.vim
Now that's enabled, one needs to specify the matching pairs for the GNU Octave language. The less broken solution i've found by Jake Wasserman:
let s:conditionalEnd = '\(([^()]*\)\@!\<end\>\([^()]*)\)\@!' autocmd FileType octave let b:match_words = '\<if\>\|\<while\>\|\<for\>\|\<switch\>:' . \ s:conditionalEnd . ',\<if\>:\<elseif\>:\<else\>:' . s:conditionalEnd
It allows to jump (quasi-)correctly even in the presence of array indexing with end
. Place the cursor on an if
keyword for example and press %, it'll move to the corresponding elseif
, else
, end
keywords.
Any improvements on the b:match_words
variable are welcome.