blob: 6a01568a9074905d1234f38097686ba6356414d8 [file] [log] [blame]
Christian Brabandtb4ddc6c2024-01-02 16:51:11 +01001*if_ruby.txt* For Vim version 9.1. Last change: 2019 Jul 21
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Shugo Maeda
5
6The Ruby Interface to Vim *ruby* *Ruby*
7
8
91. Commands |ruby-commands|
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +0100102. The Vim module |ruby-vim|
113. Vim::Buffer objects |ruby-buffer|
124. Vim::Window objects |ruby-window|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000135. Global variables |ruby-globals|
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100146. rubyeval() Vim function |ruby-rubyeval|
157. Dynamic loading |ruby-dynamic|
Bram Moolenaar071d4272004-06-13 20:20:40 +000016
Bram Moolenaar071d4272004-06-13 20:20:40 +000017 *E266* *E267* *E268* *E269* *E270* *E271* *E272* *E273*
18
Bram Moolenaar25c9c682019-05-05 18:13:34 +020019{only available when Vim was compiled with the |+ruby| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +000020
21The home page for ruby is http://www.ruby-lang.org/. You can find links for
22downloading Ruby there.
23
24==============================================================================
251. Commands *ruby-commands*
26
27 *:ruby* *:rub*
Bram Moolenaar9b451252012-08-15 17:43:31 +020028:rub[y] {cmd} Execute Ruby command {cmd}. A command to try it out: >
29 :ruby print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000030
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +020031:rub[y] << [trim] [{endmarker}]
Bram Moolenaar071d4272004-06-13 20:20:40 +000032{script}
Bram Moolenaar2e693a82019-10-16 22:35:02 +020033{endmarker}
Bram Moolenaar071d4272004-06-13 20:20:40 +000034 Execute Ruby script {script}.
Bram Moolenaar54775062019-07-31 21:07:14 +020035
Bram Moolenaar2e693a82019-10-16 22:35:02 +020036 If [endmarker] is omitted, it defaults to a dot '.'
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +020037 like for the |:append| and |:insert| commands. Refer
38 to |:let-heredoc| for more information.
39
Bram Moolenaar54775062019-07-31 21:07:14 +020040
41 This form of the |:ruby| command is mainly useful for
Bram Moolenaar071d4272004-06-13 20:20:40 +000042 including ruby code in vim scripts.
Bram Moolenaar54775062019-07-31 21:07:14 +020043
Bram Moolenaar071d4272004-06-13 20:20:40 +000044 Note: This command doesn't work when the Ruby feature
45 wasn't compiled in. To avoid errors, see
46 |script-here|.
47
48Example Vim script: >
49
50 function! RedGem()
51 ruby << EOF
52 class Garnet
53 def initialize(s)
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +010054 @buffer = Vim::Buffer.current
Bram Moolenaar071d4272004-06-13 20:20:40 +000055 vimputs(s)
56 end
57 def vimputs(s)
58 @buffer.append(@buffer.count,s)
59 end
60 end
61 gem = Garnet.new("pretty")
62 EOF
63 endfunction
64<
Bram Moolenaarabd468e2016-09-08 22:22:43 +020065To see what version of Ruby you have: >
66 :ruby print RUBY_VERSION
67<
Bram Moolenaar071d4272004-06-13 20:20:40 +000068
69 *:rubydo* *:rubyd* *E265*
70:[range]rubyd[o] {cmd} Evaluate Ruby command {cmd} for each line in the
71 [range], with $_ being set to the text of each line in
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000072 turn, without a trailing <EOL>. Setting $_ will change
Bram Moolenaar071d4272004-06-13 20:20:40 +000073 the text, but note that it is not possible to add or
74 delete lines using this command.
75 The default for [range] is the whole file: "1,$".
76
77 *:rubyfile* *:rubyf*
78:rubyf[ile] {file} Execute the Ruby script in {file}. This is the same as
Bram Moolenaar214641f2017-03-05 17:04:09 +010079 `:ruby load 'file'`, but allows file name completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +000080
81Executing Ruby commands is not possible in the |sandbox|.
82
83==============================================================================
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +0100842. The Vim module *ruby-vim*
Bram Moolenaar071d4272004-06-13 20:20:40 +000085
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +010086Ruby code gets all of its access to vim via the "Vim" module.
Bram Moolenaar071d4272004-06-13 20:20:40 +000087
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +010088Overview: >
Bram Moolenaar899dddf2006-03-26 21:06:50 +000089 print "Hello" # displays a message
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +010090 Vim.command(cmd) # execute an Ex command
91 num = Vim::Window.count # gets the number of windows
92 w = Vim::Window[n] # gets window "n"
93 cw = Vim::Window.current # gets the current window
94 num = Vim::Buffer.count # gets the number of buffers
95 b = Vim::Buffer[n] # gets buffer "n"
96 cb = Vim::Buffer.current # gets the current buffer
Bram Moolenaar899dddf2006-03-26 21:06:50 +000097 w.height = lines # sets the window height
98 w.cursor = [row, col] # sets the window cursor position
99 pos = w.cursor # gets an array [row, col]
100 name = b.name # gets the buffer file name
101 line = b[n] # gets a line from the buffer
102 num = b.count # gets the number of lines
103 b[n] = str # sets a line in the buffer
104 b.delete(n) # deletes a line
105 b.append(n, str) # appends a line after n
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +0100106 line = Vim::Buffer.current.line # gets the current line
107 num = Vim::Buffer.current.line_number # gets the current line number
108 Vim::Buffer.current.line = "test" # sets the current line number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109<
110
111Module Functions:
112
113 *ruby-message*
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +0100114Vim::message({msg})
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115 Displays the message {msg}.
116
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100117 *ruby-blob*
118Vim::blob({arg})
Bram Moolenaar314dd792019-02-03 15:27:20 +0100119 Return |Blob| literal string from {arg}.
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100120
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121 *ruby-set_option*
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +0100122Vim::set_option({arg})
Bram Moolenaar071d4272004-06-13 20:20:40 +0000123 Sets a vim option. {arg} can be any argument that the ":set" command
124 accepts. Note that this means that no spaces are allowed in the
125 argument! See |:set|.
126
127 *ruby-command*
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +0100128Vim::command({cmd})
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129 Executes Ex command {cmd}.
130
131 *ruby-evaluate*
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +0100132Vim::evaluate({expr})
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133 Evaluates {expr} using the vim internal expression evaluator (see
Bram Moolenaar2b8388b2015-02-28 13:11:45 +0100134 |expression|). Returns the expression result as:
135 - a Integer if the Vim expression evaluates to a number
136 - a Float if the Vim expression evaluates to a float
137 - a String if the Vim expression evaluates to a string
138 - a Array if the Vim expression evaluates to a Vim list
139 - a Hash if the Vim expression evaluates to a Vim dictionary
140 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141
142==============================================================================
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +01001433. Vim::Buffer objects *ruby-buffer*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +0100145Vim::Buffer objects represent vim buffers.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146
147Class Methods:
148
149current Returns the current buffer object.
150count Returns the number of buffers.
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000151self[{n}] Returns the buffer object for the number {n}. The first number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152 is 0.
153
154Methods:
155
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200156name Returns the full name of the buffer.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157number Returns the number of the buffer.
158count Returns the number of lines.
159length Returns the number of lines.
160self[{n}] Returns a line from the buffer. {n} is the line number.
161self[{n}] = {str}
162 Sets a line in the buffer. {n} is the line number.
163delete({n}) Deletes a line from the buffer. {n} is the line number.
164append({n}, {str})
165 Appends a line after the line {n}.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000166line Returns the current line of the buffer if the buffer is
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000167 active.
168line = {str} Sets the current line of the buffer if the buffer is active.
169line_number Returns the number of the current line if the buffer is
170 active.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171
172==============================================================================
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +01001734. Vim::Window objects *ruby-window*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174
Bram Moolenaar2c5e8e82015-12-05 20:59:21 +0100175Vim::Window objects represent vim windows.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000176
177Class Methods:
178
179current Returns the current window object.
180count Returns the number of windows.
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000181self[{n}] Returns the window object for the number {n}. The first number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182 is 0.
183
184Methods:
185
186buffer Returns the buffer displayed in the window.
187height Returns the height of the window.
188height = {n} Sets the window height to {n}.
Bram Moolenaare344bea2005-09-01 20:46:49 +0000189width Returns the width of the window.
190width = {n} Sets the window width to {n}.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191cursor Returns a [row, col] array for the cursor position.
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200192 First line number is 1 and first column number is 0.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000193cursor = [{row}, {col}]
194 Sets the cursor position to {row} and {col}.
195
196==============================================================================
Bram Moolenaara5792f52005-11-23 21:25:05 +00001975. Global variables *ruby-globals*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198
199There are two global variables.
200
201$curwin The current window object.
202$curbuf The current buffer object.
203
204==============================================================================
Bram Moolenaare99be0e2019-03-26 22:51:09 +01002056. rubyeval() Vim function *ruby-rubyeval*
206
207To facilitate bi-directional interface, you can use |rubyeval()| function to
208evaluate Ruby expressions and pass their values to Vim script.
209
210The Ruby value "true", "false" and "nil" are converted to v:true, v:false and
211v:null, respectively.
212
213==============================================================================
2147. Dynamic loading *ruby-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000215
Bram Moolenaar05365702010-10-27 18:34:44 +0200216On MS-Windows and Unix the Ruby library can be loaded dynamically. The
217|:version| output then includes |+ruby/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000218
Bram Moolenaar05365702010-10-27 18:34:44 +0200219This means that Vim will search for the Ruby DLL file or shared library only
220when needed. When you don't use the Ruby interface you don't need it, thus
221you can use Vim even though this library file is not on your system.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000222
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100223
Bram Moolenaard94464e2015-11-02 15:28:18 +0100224MS-Windows ~
225
Bram Moolenaar69154f22010-07-18 21:42:34 +0200226You need to install the right version of Ruby for this to work. You can find
227the package to download from:
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200228http://rubyinstaller.org/downloads/
229Currently that is rubyinstaller-2.2.5.exe
Bram Moolenaar69154f22010-07-18 21:42:34 +0200230
Bram Moolenaara5792f52005-11-23 21:25:05 +0000231To use the Ruby interface the Ruby DLL must be in your search path. In a
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100232console window type "path" to see what directories are used. The 'rubydll'
233option can be also used to specify the Ruby DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000234
235The name of the DLL must match the Ruby version Vim was compiled with.
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200236Currently the name is "msvcrt-ruby220.dll". That is for Ruby 2.2.X. To know
Bram Moolenaar69154f22010-07-18 21:42:34 +0200237for sure edit "gvim.exe" and search for "ruby\d*.dll\c".
238
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200239If you want to build Vim with RubyInstaller 1.9 or 2.X using MSVC, you need
240some tricks. See the src/INSTALLpc.txt for detail.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000241
Bram Moolenaar98ef2332018-03-18 14:44:37 +0100242If Vim is built with RubyInstaller 2.4 or later, you may also need to add
243"C:\Ruby<version>\bin\ruby_builtin_dlls" to the PATH environment variable.
244
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100245
Bram Moolenaard94464e2015-11-02 15:28:18 +0100246Unix ~
247
248The 'rubydll' option can be used to specify the Ruby shared library file
249instead of DYNAMIC_RUBY_DLL file what was specified at compile time. The
250version of the shared library must match the Ruby version Vim was compiled
251with.
252
Bram Moolenaara5792f52005-11-23 21:25:05 +0000253==============================================================================
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200254 vim:tw=78:ts=8:noet:ft=help:norl: