576 lines · 21.4 KB · Text
RawDownload
*filetype.txt*  For Vim version 7.1.  Last change: 2007 May 10  		  VIM REFERENCE MANUAL    by Bram Moolenaar  Filetypes						*filetype* *file-type* 1. Filetypes					|filetypes|2. Filetype plugin				|filetype-plugins|3. Docs for the default filetype plugins.	|ftplugin-docs| Also see |autocmd.txt|. {Vi does not have any of these commands} ==============================================================================1. Filetypes					*filetypes* *file-types* Vim can detect the type of file that is edited.  This is done by checking thefile name and sometimes by inspecting the contents of the file for specifictext. 							*:filetype* *:filet*To enable file type detection, use this command in your vimrc: >	:filetype onEach time a new or existing file is edited, Vim will try to recognize the typeof the file and set the 'filetype' option.  This will trigger the FileTypeevent, which can be used to set the syntax highlighting, set options, etc. NOTE: Filetypes and 'compatible' don't work together well, since being Vicompatible means options are global.  Resetting 'compatible' is recommended,if you didn't do that already. Detail: The ":filetype on" command will load one of these files:		Amiga	    $VIMRUNTIME/filetype.vim		Mac	    $VIMRUNTIME:filetype.vim		MS-DOS	    $VIMRUNTIME\filetype.vim		RiscOS	    Vim:Filetype		Unix	    $VIMRUNTIME/filetype.vim		VMS	    $VIMRUNTIME/filetype.vim	This file is a Vim script that defines autocommands for the	BufNewFile and BufRead events.  If the file type is not found by the	name, the file $VIMRUNTIME/scripts.vim is used to detect it from the	contents of the file.	When the GUI is running or will start soon, the menu.vim script is	also sourced.  See |'go-M'| about avoiding that. To add your own file types, see |new-filetype| below.  To search for help on afiletype prepend "ft-" and optionally append "-syntax", "-indent" or"-plugin".  For example: >	:help ft-vim-indent	:help ft-vim-syntax	:help ft-man-plugin If the file type is not detected automatically, or it finds the wrong type,you can either set the 'filetype' option manually, or add a modeline to yourfile.  Example, for in an IDL file use the command: >	:set filetype=idl or add this |modeline| to the file:	/* vim: set filetype=idl : */ ~ 						*:filetype-plugin-on*You can enable loading the plugin files for specific file types with: >	:filetype plugin onIf filetype detection was not switched on yet, it will be as well.This actually loads the file "ftplugin.vim" in 'runtimepath'.The result is that when a file is edited its plugin file is loaded (if thereis one for the detected filetype). |filetype-plugin| 						*:filetype-plugin-off*You can disable it again with: >	:filetype plugin offThe filetype detection is not switched off then.  But if you do switch offfiletype detection, the plugins will not be loaded either.This actually loads the file "ftplugof.vim" in 'runtimepath'. 						*:filetype-indent-on*You can enable loading the indent file for specific file types with: >	:filetype indent onIf filetype detection was not switched on yet, it will be as well.This actually loads the file "indent.vim" in 'runtimepath'.The result is that when a file is edited its indent file is loaded (if thereis one for the detected filetype). |indent-expression| 						*:filetype-indent-off*You can disable it again with: >	:filetype indent offThe filetype detection is not switched off then.  But if you do switch offfiletype detection, the indent files will not be loaded either.This actually loads the file "indoff.vim" in 'runtimepath'.This disables auto-indenting for files you will open.  It will keep working inalready opened files.  Reset 'autoindent', 'cindent', 'smartindent' and/or'indentexpr' to disable indenting in an opened file. 						*:filetype-off*To disable file type detection, use this command: >	:filetype offThis will keep the flags for "plugin" and "indent", but since no file typesare being detected, they won't work until the next ":filetype on".  Overview:					*:filetype-overview* command				detection	plugin		indent ~:filetype on			on		unchanged	unchanged:filetype off			off		unchanged	unchanged:filetype plugin on		on		on		unchanged:filetype plugin off		unchanged	off		unchanged:filetype indent on		on		unchanged	on:filetype indent off		unchanged	unchanged	off:filetype plugin indent on	on		on		on:filetype plugin indent off	unchanged	off		off To see the current status, type: >	:filetypeThe output looks something like this: >	filetype detection:ON  plugin:ON  indent:OFF The file types are also used for syntax highlighting.  If the ":syntax on"command is used, the file type detection is installed too.  There is no needto do ":filetype on" after ":syntax on". To disable one of the file types, add a line in the your filetype file, see|remove-filetype|. 							*filetype-detect*To detect the file type again: >	:filetype detectUse this if you started with an empty file and typed text that makes itpossible to detect the file type.  For example, when you entered this in ashell script: "#!/bin/csh".   When filetype detection was off, it will be enabled first, like the "on"argument was used. 							*filetype-overrule*When the same extension is used for two filetypes, Vim tries to guess whatkind of file it is.  This doesn't always work.  A number of global variablescan be used to overrule the filetype used for certain extensions: 	file name	variable ~	*.asa		g:filetype_asa	|ft-aspvbs-syntax| |ft-aspperl-syntax|	*.asp		g:filetype_asp	|ft-aspvbs-syntax| |ft-aspperl-syntax|	*.asm		g:asmsyntax	|ft-asm-syntax|	*.prg		g:filetype_prg	*.pl		g:filetype_pl	*.inc		g:filetype_inc	*.w		g:filetype_w	|ft-cweb-syntax|	*.i		g:filetype_i	|ft-progress-syntax|	*.p		g:filetype_p	|ft-pascal-syntax|	*.sh		g:bash_is_sh	|ft-sh-syntax|	*.tex		g:tex_flavor	|ft-tex-plugin| 							*filetype-ignore*To avoid that certain files are being inspected, the g:ft_ignore_pat variableis used.  The default value is set like this: >	:let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'This means that the contents of compressed files are not inspected. 							*new-filetype*If a file type that you want to use is not detected yet, there are four waysto add it.  In any way, it's better not to modify the $VIMRUNTIME/filetype.vimfile.  It will be overwritten when installing a new version of Vim. A. If you want to overrule all default file type checks.   This works by writing one file for each filetype.  The disadvantage is that   means there can be many files.  The advantage is that you can simply drop   this file in the right directory to make it work.							*ftdetect*   1. Create your user runtime directory.  You would normally use the first      item of the 'runtimepath' option.  Then create the directory "ftdetect"      inside it.  Example for Unix: >	:!mkdir ~/.vim	:!mkdir ~/.vim/ftdetect<   2. Create a file that contains an autocommand to detect the file type.      Example: >	au BufRead,BufNewFile *.mine		set filetype=mine<     Note that there is no "augroup" command, this has already been done      when sourcing your file.  You could also use the pattern "*" and then      check the contents of the file to recognize it.      Write this file as "mine.vim" in the "ftdetect" directory in your user      runtime directory.  For example, for Unix: >	:w ~/.vim/ftdetect/mine.vim <  3. To use the new filetype detection you must restart Vim.    The files in the "ftdetect" directory are used after all the default   checks, thus they can overrule a previously detected file type.  But you   can also use |:setfiletype| to keep a previously detected filetype. B. If you want to detect your file after the default file type checks.    This works like A above, but instead of setting 'filetype' unconditionally   use ":setfiletype".  This will only set 'filetype' if no file type was   detected yet.  Example: >	au BufRead,BufNewFile *.txt		setfiletype text<   You can also use the already detected file type in your command.  For   example, to use the file type "mypascal" when "pascal" has been detected: >	au BufRead,BufNewFile *		if &ft == 'pascal' | set ft=mypascal								       | endif C. If your file type can be detected by the file name.   1. Create your user runtime directory.  You would normally use the first      item of the 'runtimepath' option.  Example for Unix: >	:!mkdir ~/.vim<   2. Create a file that contains autocommands to detect the file type.      Example: >	" my filetype file	if exists("did_load_filetypes")	  finish	endif	augroup filetypedetect	  au! BufRead,BufNewFile *.mine		setfiletype mine	  au! BufRead,BufNewFile *.xyz		setfiletype drawing	augroup END<     Write this file as "filetype.vim" in your user runtime directory.  For      example, for Unix: >	:w ~/.vim/filetype.vim <  3. To use the new filetype detection you must restart Vim.    Your filetype.vim will be sourced before the default FileType autocommands   have been installed.  Your autocommands will match first, and the   ":setfiletype" command will make sure that no other autocommands will set   'filetype' after this.							*new-filetype-scripts*D. If your filetype can only be detected by inspecting the contents of the   file.    1. Create your user runtime directory.  You would normally use the first      item of the 'runtimepath' option.  Example for Unix: >	:!mkdir ~/.vim<   2. Create a vim script file for doing this.  Example: >	if did_filetype()	" filetype already set..	  finish		" ..don't do these checks	endif	if getline(1) =~ '^#!.*\<mine\>'	  setfiletype mine	elseif getline(1) =~? '\<drawing\>'	  setfiletype drawing	endif<     See $VIMRUNTIME/scripts.vim for more examples.      Write this file as "scripts.vim" in your user runtime directory.  For      example, for Unix: >	:w ~/.vim/scripts.vim<   3. The detection will work right away, no need to restart Vim.    Your scripts.vim is loaded before the default checks for file types, which   means that your rules override the default rules in   $VIMRUNTIME/scripts.vim. 						*remove-filetype*If a file type is detected that is wrong for you, install a filetype.vim orscripts.vim to catch it (see above).  You can set 'filetype' to a non-existingname to avoid that it will be set later anyway: >	:set filetype=ignored If you are setting up a system with many users, and you don't want each userto add/remove the same filetypes, consider writing the filetype.vim andscripts.vim files in a runtime directory that is used for everybody.  Checkthe 'runtimepath' for a directory to use.  If there isn't one, set'runtimepath' in the |system-vimrc|.  Be careful to keep the defaultdirectories!  						*autocmd-osfiletypes*On operating systems which support storing a file type with the file, you canspecify that an autocommand should only be executed if the file is of acertain type. The actual type checking depends on which platform you are running Vimon; see your system's documentation for details. To use osfiletype checking in an autocommand you should put a list of types tomatch in angle brackets in place of a pattern, like this: > 	:au BufRead *.html,<&faf;HTML>  runtime! syntax/html.vim This will match: - Any file whose name ends in `.html'- Any file whose type is `&faf' or 'HTML', where the meaning of these types  depends on which version of Vim you are using.  Unknown types are considered NOT to match. You can also specify a type and a pattern at the same time (in which case theymust both match): > 	:au BufRead <&fff>diff* This will match files of type `&fff' whose names start with `diff'. Note that osfiletype checking is skipped if Vim is compiled without the|+osfiletype| feature. 							*plugin-details*The "plugin" directory can be in any of the directories in the 'runtimepath'option.  All of these directories will be searched for plugins and they areall loaded.  For example, if this command: > 	set runtimepath produces this output: 	runtimepath=/etc/vim,~/.vim,/usr/local/share/vim/vim60 ~ then Vim will load all plugins in these directories and below: 	/etc/vim/plugin/  ~	~/.vim/plugin/  ~	/usr/local/share/vim/vim60/plugin/  ~ Note that the last one is the value of $VIMRUNTIME which has been expanded. What if it looks like your plugin is not being loaded?  You can find out whathappens when Vim starts up by using the |-V| argument: > 	vim -V2 You will see a lot of messages, in between them is a remark about loading theplugins.  It starts with: 	Searching for "plugin/**/*.vim" in ~ There you can see where Vim looks for your plugin scripts. ==============================================================================2. Filetype plugin					*filetype-plugins* When loading filetype plugins has been enabled |:filetype-plugin-on|, optionswill be set and mappings defined.  These are all local to the buffer, theywill not be used for other files. Defining mappings for a filetype may get in the way of the mappings youdefine yourself.  There are a few ways to avoid this:1. Set the "maplocalleader" variable to the key sequence you want the mappings   to start with.  Example: >	:let maplocalleader = ","<  All mappings will then start with a comma instead of the default, which   is a backslash.  Also see |<LocalLeader>|. 2. Define your own mapping.  Example: >	:map ,p <Plug>MailQuote<  You need to check the description of the plugin file below for the   functionality it offers and the string to map to.   You need to define your own mapping before the plugin is loaded (before   editing a file of that type).  The plugin will then skip installing the   default mapping. 3. Disable defining mappings for a specific filetype by setting a variable,   which contains the name of the filetype.  For the "mail" filetype this   would be: >	:let no_mail_maps = 1 4. Disable defining mappings for all filetypes by setting a variable: >	:let no_plugin_maps = 1< 							*ftplugin-overrule*If a global filetype plugin does not do exactly what you want, there are threeways to change this: 1. Add a few settings.   You must create a new filetype plugin in a directory early in   'runtimepath'.  For Unix, for example you could use this file: >	vim ~/.vim/ftplugin/fortran.vim<  You can set those settings and mappings that you would like to add.  Note   that the global plugin will be loaded after this, it may overrule the   settings that you do here.  If this is the case, you need to use one of the   following two methods. 2. Make a copy of the plugin and change it.   You must put the copy in a directory early in 'runtimepath'.  For Unix, for   example, you could do this: >	cp $VIMRUNTIME/ftplugin/fortran.vim ~/.vim/ftplugin/fortran.vim<  Then you can edit the copied file to your liking.  Since the b:did_ftplugin   variable will be set, the global plugin will not be loaded.   A disadvantage of this method is that when the distributed plugin gets   improved, you will have to copy and modify it again. 3. Overrule the settings after loading the global plugin.   You must create a new filetype plugin in a directory from the end of   'runtimepath'.  For Unix, for example, you could use this file: >	vim ~/.vim/after/ftplugin/fortran.vim<  In this file you can change just those settings that you want to change. ==============================================================================3.  Docs for the default filetype plugins.		*ftplugin-docs*  CHANGELOG						*ft-changelog-plugin* Allows for easy entrance of Changelog entries in Changelog files.  There aresome commands, mappings, and variables worth exploring: Options:'comments'		is made empty to not mess up formatting.'textwidth'		is set to 78, which is standard.'formatoptions'		the 't' flag is added to wrap when inserting text. Commands:NewChangelogEntry	Adds a new Changelog entry in an intelligent fashion			(see below). Local mappings:<Leader>o		Starts a new Changelog entry in an equally intelligent			fashion (see below). Global mappings:			NOTE: The global mappings are accessed by sourcing the			ftplugin/changelog.vim file first, e.g. with >				runtime ftplugin/changelog.vim<			in your |.vimrc|.<Leader>o		Switches to the ChangeLog buffer opened for the			current directory, or opens it in a new buffer if it			exists in the current directory.  Then it does the			same as the local <Leader>o described above. Variables:g:changelog_timeformat  Deprecated; use g:changelog_dateformat instead.g:changelog_dateformat	The date (and time) format used in ChangeLog entries.			The format accepted is the same as for the			|strftime()| function.			The default is "%Y-%m-%d" which is the standard format			for many ChangeLog layouts.g:changelog_username	The name and email address of the user.			The default is deduced from environment variables and			system files.  It searches /etc/passwd for the comment			part of the current user, which informally contains			the real name of the user up to the first separating			comma.  then it checks the $NAME environment variable			and finally runs `whoami` and `hostname` to build an			email address.  The final form is >				Full Name  <user@host><g:changelog_new_date_format			The format to use when creating a new date-entry.			The following table describes special tokens in the			string:				%%	insert a single '%' character				%d	insert the date from above				%u	insert the user from above				%c	where to position cursor when done			The default is "%d  %u\n\n\t* %c\n\n", which produces			something like (| is where cursor will be, unless at			the start of the line where it denotes the beginning			of the line) >				|2003-01-14  Full Name  <user@host>				|				|        * |<g:changelog_new_entry_format			The format used when creating a new entry.			The following table describes special tokens in the			string:				%c	where to position cursor when done			The default is "\t*%c", which produces something			similar to >				|        * |<g:changelog_date_entry_search			The search pattern to use when searching for a			date-entry.			The same tokens that can be used for			g:changelog_new_date_format can be used here as well.			The default is '^\s*%d\_s*%u' which finds lines			matching the form >				|2003-01-14  Full Name  <user@host><			and some similar formats. g:changelog_date_end_entry_search			The search pattern to use when searching for the end			of a date-entry.			The same tokens that can be used for			g:changelog_new_date_format can be used here as well.			The default is '^\s*$' which finds lines that contain			only whitespace or are completely empty. The Changelog entries are inserted where they add the least amount of text.After figuring out the current date and user, the file is searched for anentry beginning with the current date and user and if found adds another itemunder it.  If not found, a new entry and item is prepended to the beginning ofthe Changelog.  FORTRAN							*ft-fortran-plugin* Options:'expandtab'	is switched on to avoid tabs as required by the Fortran		standards unless the user has set fortran_have_tabs in .vimrc.'textwidth'	is set to 72 for fixed source format as required by the		Fortran standards and to 80 for free source format.'formatoptions' is set to break code and comment lines and to preserve long		lines.  You can format comments with |gq|.

Lines 1–500 of 576.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t