UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 30.18 Setting vi Options Automatically for Individual FilesChapter 30
vi Tips and Tricks
Next: 30.20 Multiple Editor Setup Files; Starting with a Search

30.19 Modelines: Bug or Feature?

Some versions of vi and ex have a modeline or modelines option. When that option is set in your .exrc file (30.6), you can store setup commands at the top or bottom of any file you edit. When you start the editor, it will read the setup commands and run them. This is a lot like having a separate .exrc for each file you edit.

CAUTION: Modelines can be a security problem. If any troublemakers should edit your files and change your modelines, think about the difficulties they can cause you. Most newer versions of vi disable modelines by default.

Here's a sample file - a shell script (44.1) with a modeline on the second line:

#! /bin/sh
# vi:set number wrapmargin=0 autoindent showmatch:

while read line

The modeline has #, the shell's comment character, at the start of it - so, the shell will ignore the line but vi will still read it. This is only necessary in a shell script, but it demonstrates that the modeline need not start in column 1. The modeline itself consists of a space or tab, the string vi: or ex:, the commands to be executed, and a closing colon. Both the space or tab before the modeline, and the closing colon are important - they tell the editor where the modeline begins and ends. You can put modelines on the first five or last five lines of a file (or both).

When you start vi on the file shown in the example above, it sets the options number, wrapmargin=0, autoindent, and showmatch.

NOTE: Any time you open a file with a modeline, vi changes the file status to "modified"-even if you haven't actually made any changes. To leave the file without writing it, you have to use the :q! command. This is a hassle when you use UNIX tools that depend on a file's modification time, like make (28.13), especially if you also have the autowrite option set.

To find out whether your version of vi supports modelines - and whether the option is called modeline or modelines-get a list of all options with the command :set all. If the option is available, but not set, you'll see nomodeline (or nomodelines) as one of the options. Put the command

set modeline(s)

in your .exrc file to enable the option. Unfortunately, some versions list the option but don't support it!

- JP

Previous: 30.18 Setting vi Options Automatically for Individual FilesUNIX Power ToolsNext: 30.20 Multiple Editor Setup Files; Starting with a Search
30.18 Setting vi Options Automatically for Individual FilesBook Index30.20 Multiple Editor Setup Files; Starting with a Search

The UNIX CD Bookshelf NavigationThe UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System