blob: 882cd6a8530f870a8d5a1c611c17a2f2fb25fca8 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001*if_perl.txt* For Vim version 7.0aa. Last change: 2004 May 01
2
3
4 VIM REFERENCE MANUAL by Sven Verdoolaege
5 and Matt Gerassimof
6
7Perl and Vim *perl* *Perl*
8
91. Editing Perl files |perl-editing|
102. Compiling VIM with Perl interface |perl-compiling|
113. Using the Perl interface |perl-using|
12
13{Vi does not have any of these commands}
14
15The Perl interface only works when Vim was compiled with the |+perl| feature.
16
17==============================================================================
181. Editing Perl files *perl-editing*
19
20Vim syntax highlighting supports Perl and POD files. Vim assumes a file is
21Perl code if the filename has a .pl or .pm suffix. Vim also examines the first
22line of a file, regardless of the filename suffix, to check if a file is a
23Perl script (see scripts.vim in Vim's syntax directory). Vim assumes a file
24is POD text if the filename has a .POD suffix.
25
26To use tags with Perl, you need a recent version of Exuberant ctags. Look
27here:
28 http://ctags.sourceforge.net
29
30Alternatively, you can use the Perl script pltags.pl, which is shipped with
31Vim in the $VIMRUNTIME/tools directory. This script has currently more
32features than Exuberant ctags' Perl support.
33
34==============================================================================
352. Compiling VIM with Perl interface *perl-compiling*
36
37To compile Vim with Perl interface, you need Perl 5.004 (or later). Perl must
38be installed before you compile Vim. Vim's Perl interface does NOT work with
39the 5.003 version that has been officially released! It will probably work
40with Perl 5.003_05 and later.
41
42The Perl patches for Vim were made by:
43 Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
44 Matt Gerassimof
45
46Perl for MS-Windows can be found at:
47http://www.perl.com/CPAN/ports/nt/Standard/x86/
48
49==============================================================================
503. Using the Perl interface *perl-using*
51
52 *:perl* *:pe*
53:pe[rl] {cmd} Execute Perl command {cmd}. The current package
54 is "main".
55
56:pe[rl] << {endpattern}
57{script}
58{endpattern}
59 Execute Perl script {script}.
60 {endpattern} must NOT be preceded by any white space.
61 If {endpattern} is omitted, it defaults to a dot '.'
62 like for the |:append| and |:insert| commands. Using
63 '.' helps when inside a function, because "$i;" looks
64 like the start of an |:insert| command to Vim.
65 This form of the |:perl| command is mainly useful for
66 including perl code in vim scripts.
67 Note: This command doesn't work when the Perl feature
68 wasn't compiled in. To avoid errors, see
69 |script-here|.
70
71
72Example vim script: >
73
74 function! WhitePearl()
75 perl << EOF
76 VIM::Msg("pearls are nice for necklaces");
77 VIM::Msg("rubys for rings");
78 VIM::Msg("pythons for bags");
79 VIM::Msg("tcls????");
80 EOF
81 endfunction
82<
83
84 *:perldo* *:perld*
85:[range]perld[o] {cmd} Execute Perl command {cmd} for each line in the
86 [range], with $_ being set to the text of each line in
87 turn, without a trailing <EOL>. Setting $_ will change
88 the text, but note that it is not possible to add or
89 delete lines using this command.
90 The default for [range] is the whole file: "1,$".
91
92Here are some things you can try: >
93
94 :perl $a=1
95 :perldo $_ = reverse($_);1
96 :perl VIM::Msg("hello")
97 :perl $line = $curbuf->Get(42)
98<
99 *E299*
100Executing Perl commands in the |sandbox| is limited. ":perldo" will not be
101possible at all. ":perl" will be evaluated in the Safe environment, if
102possible.
103
104
105 *perl-overview*
106Here is an overview of the functions that are available to Perl: >
107
108 :perl VIM::Msg("Text") # displays a message
109 :perl VIM::Msg("Error", "ErrorMsg") # displays an error message
110 :perl VIM::Msg("remark", "Comment") # displays a highlighted message
111 :perl VIM::SetOption("ai") # sets a vim option
112 :perl $nbuf = VIM::Buffers() # returns the number of buffers
113 :perl @buflist = VIM::Buffers() # returns array of all buffers
114 :perl $mybuf = (VIM::Buffers('qq.c'))[0] # returns buffer object for 'qq.c'
115 :perl @winlist = VIM::Windows() # returns array of all windows
116 :perl $nwin = VIM::Windows() # returns the number of windows
117 :perl ($success, $v) = VIM::Eval('&path') # $v: option 'path', $success: 1
118 :perl ($success, $v) = VIM::Eval('&xyz') # $v: '' and $success: 0
119 :perl $v = VIM::Eval('expand("<cfile>")') # expands <cfile>
120 :perl $curwin->SetHeight(10) # sets the window height
121 :perl @pos = $curwin->Cursor() # returns (row, col) array
122 :perl @pos = (10, 10)
123 :perl $curwin->Cursor(@pos) # sets cursor to @pos
124 :perl $curwin->Cursor(10,10) # sets cursor to row 10 col 10
125 :perl $mybuf = $curwin->Buffer() # returns the buffer object for window
126 :perl $curbuf->Name() # returns buffer name
127 :perl $curbuf->Number() # returns buffer number
128 :perl $curbuf->Count() # returns the number of lines
129 :perl $l = $curbuf->Get(10) # returns line 10
130 :perl @l = $curbuf->Get(1 .. 5) # returns lines 1 through 5
131 :perl $curbuf->Delete(10) # deletes line 10
132 :perl $curbuf->Delete(10, 20) # delete lines 10 through 20
133 :perl $curbuf->Append(10, "Line") # appends a line
134 :perl $curbuf->Append(10, "Line1", "Line2", "Line3") # appends 3 lines
135 :perl @l = ("L1", "L2", "L3")
136 :perl $curbuf->Append(10, @l) # appends L1, L2 and L3
137 :perl $curbuf->Set(10, "Line") # replaces line 10
138 :perl $curbuf->Set(10, "Line1", "Line2") # replaces lines 10 and 11
139 :perl $curbuf->Set(10, @l) # replaces 3 lines
140<
141 *perl-Msg*
142VIM::Msg({msg}, {group}?)
143 Displays the message {msg}. The optional {group}
144 argument specifies a highlight group for Vim to use
145 for the message.
146
147 *perl-SetOption*
148VIM::SetOption({arg}) Sets a vim option. {arg} can be any argument that the
149 ":set" command accepts. Note that this means that no
150 spaces are allowed in the argument! See |:set|.
151
152 *perl-Buffers*
153VIM::Buffers([{bn}...]) With no arguments, returns a list of all the buffers
154 in an array context or returns the number of buffers
155 in a scalar context. For a list of buffer names or
156 numbers {bn}, returns a list of the buffers matching
157 {bn}, using the same rules as Vim's internal
158 |bufname()| function.
159
160 *perl-Windows*
161VIM::Windows([{wn}...]) With no arguments, returns a list of all the windows
162 in an array context or returns the number of windows
163 in a scalar context. For a list of window numbers
164 {wn}, returns a list of the windows with those
165 numbers.
166
167 *perl-DoCommand*
168VIM::DoCommand({cmd}) Executes Ex command {cmd}.
169
170 *perl-Eval*
171VIM::Eval({expr}) Evaluates {expr} and returns (success, val).
172 success=1 indicates that val contains the value of
173 {expr}; success=0 indicates a failure to evaluate
174 the expression. '@x' returns the contents of register
175 x, '&x' returns the value of option x, 'x' returns the
176 value of internal |variables| x, and '$x' is equivalent
177 to perl's $ENV{x}. All |functions| accessible from
178 the command-line are valid for {expr}.
179
180 *perl-SetHeight*
181Window->SetHeight({height})
182 Sets the Window height to {height}, within screen
183 limits.
184
185 *perl-GetCursor*
186Window->Cursor({row}?, {col}?)
187 With no arguments, returns a (row, col) array for the
188 current cursor position in the Window. With {row} and
189 {col} arguments, sets the Window's cursor position to
190 {row} and {col}. Note that {col} is numbered from 0,
191 Perl-fashion, and thus is one less than the value in
192 Vim's ruler.
193
194Window->Buffer() *perl-Buffer*
195 Returns the Buffer object corresponding to the given
196 Window.
197
198 *perl-Name*
199Buffer->Name() Returns the filename for the Buffer.
200
201 *perl-Number*
202Buffer->Number() Returns the number of the Buffer.
203
204 *perl-Count*
205Buffer->Count() Returns the number of lines in the Buffer.
206
207 *perl-Get*
208Buffer->Get({lnum}, {lnum}?, ...)
209 Returns a text string of line {lnum} in the Buffer
210 for each {lnum} specified. An array can be passed
211 with a list of {lnum}'s specified.
212
213 *perl-Delete*
214Buffer->Delete({lnum}, {lnum}?)
215 Deletes line {lnum} in the Buffer. With the second
216 {lnum}, deletes the range of lines from the first
217 {lnum} to the second {lnum}.
218
219 *perl-Append*
220Buffer->Append({lnum}, {line}, {line}?, ...)
221 Appends each {line} string after Buffer line {lnum}.
222 The list of {line}s can be an array.
223
224 *perl-Set*
225Buffer->Set({lnum}, {line}, {line}?, ...)
226 Replaces one or more Buffer lines with specified
227 {lines}s, starting at Buffer line {lnum}. The list of
228 {line}s can be an array. If the arguments are
229 invalid, replacement does not occur.
230
231$main::curwin
232 The current window object.
233
234$main::curbuf
235 The current buffer object.
236
237
238 *script-here*
239When using a script language in-line, you might want to skip this when the
240language isn't supported. But this mechanism doesn't work: >
241 if has('perl')
242 perl << EOF
243 this will NOT work!
244 EOF
245 endif
246Instead, put the Perl/Python/Ruby/etc. command in a function and call that
247function: >
248 if has('perl')
249 function DefPerl()
250 perl << EOF
251 this works
252 EOF
253 endfunction
254 call DefPerl()
255 endif
256Note that "EOF" must be at the start of the line.
257
258 vim:tw=78:ts=8:ft=help:norl: