First, I put all the code in a module, which I load from the vim script. All of the mappings and functions I want to define are in the vim script, but they are just stubs for a perl functions, eg
By putting only trivial perl in the vim script, I minimize difficult-to-debug problems that come from mixing perl and vim. Also, things like syntax highlighting work perfectly on the module.function! s:rowwise_dd() range perl VIM::CSV::rowwise_dd endfunction nnoremap <buffer> <LocalLeader><Left> :perl VIM::CSV::prev_col<CR>
Second, I want the module to syntax-check outside of vim (the major pay-off of step one). This is a simple matter of duplicating the prototypes that vim implicitly sets up, eg
I have not made any effort to make my module run outside of vim, as it is quite intimately tied to vim.sub VIM::DoCommand ($); sub VIM::Eval ($); sub VIM::Msg ($;$);
Third (my favorite part), some syntactic sugar to make vim commands look like vim commands (this should be its own module, but I'm lazy):
use Filter::Util::Call; BEGIN { filter_add( sub { my $status = filter_read; return $status unless /^\s*:/; s/"/\\"/g; s/:(.*)/VIM::DoCommand "$1";/; return $status; }) } ... :w
By the way, the problem that you don't get any output from syntax errors is really a perl bug.
In reply to Re: Writing a Filter::Simple -based filter for .vim
by pimlott
in thread Writing a Filter::Simple -based filter for .vim
by Intrepid
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |