Viper can be set free from the line-limited movements in Vi, such as l refusing to move beyond the line, ESC moving one character back, etc. These derive from Ex, which is a line editor. If your Viper customization file contains
(setq viper-ex-style-motion nil)
the motion will be a true screen editor motion. One thing you must then watch out for is that it is possible to be on the end-of-line character. The keys x and % will still work correctly, i.e., as if they were on the last character.
The word-movement commands w, e, etc., and the associated
deletion/yanking commands, dw, yw, etc., can be made to
understand Emacs syntax tables. If the variable
viper-syntax-preference
is set to strict-vi
then
the meaning of word is the same as in
Vi. However, if the value is reformed-vi
(the default) then the
alphanumeric symbols will be those specified by the current Emacs syntax
table (which may be different for different major modes) plus the
underscore symbol _, minus some non-word symbols, like ’.;,|, etc.
Both strict-vi
and reformed-vi
work close to Vi in
traditional cases, but reformed-vi
does a better job when editing
text in non-Latin alphabets.
The user can also specify the value emacs
, which would
make Viper use exactly the Emacs notion of word. In particular, the
underscore may not be part of a word. Finally, if
viper-syntax-preference
is set to extended
, Viper words would
consist of characters that are classified as alphanumeric or as
parts of symbols. This is convenient for writing programs and in many other
situations.
viper-syntax-preference
is a local variable, so it can have different
values for different major modes. For instance, in programming modes it can
have the value extended
. In text modes where words contain special
characters, such as European (non-English) letters, Cyrillic letters, etc.,
the value can be reformed-vi
or emacs
.
Changes to viper-syntax-preference
should be done in the hooks to
various major modes by executing viper-set-syntax-preference
as in
the following example:
(viper-set-syntax-preference nil "emacs")
The above discussion of the meaning of Viper’s words concerns only Viper’s
movement commands. In regular expressions, words remain the same as in
Emacs. That is, the expressions \w
, \>
, \<
, etc., use
Emacs’s idea of what is a word, and they don’t look into the value of
variable viper-syntax-preference
. This is because Viper doesn’t change
syntax tables in fear of upsetting the various major modes that set these
tables.
Textmarkers in Viper remember the file and the position, so that you can switch files by simply doing 'a. If you set up a regimen for using Textmarkers, this is very useful. Contents of textmarkers can be viewed by [marker. (Contents of registers can be viewed by ]register).