Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
Text::FindIndent(3)   User Contributed Perl Documentation  Text::FindIndent(3)

       Text::FindIndent	- Heuristically	determine the indent style

	 use Text::FindIndent;
	 my $indentation_type =	Text::FindIndent->parse($text, skip_pod	=> 1);
	 if ($indentation_type =~ /^s(\d+)/) {
	   print "Indentation with $1 spaces\n";
	 elsif ($indentation_type =~ /^t(\d+)/)	{
	   print "Indentation with tabs, a tab should indent by	$1 characters\n";
	 elsif ($indentation_type =~ /^m(\d+)/)	{
	   print "Indentation with $1 characters in tab/space mixed mode\n";
	 else {
	   print "Indentation style unknown\n";

       This is a module	that attempts to intuit	the underlying indent "policy"
       for a text file (most likely a source code file).

       The class method	"parse"	tries to determine the indentation style of
       the given piece of text (which must start at a new line and can be
       passed in either	as a string or as a reference to a scalar containing
       the string).

       Returns a letter	followed by a number. If the letter is "s", then the
       text is most likely indented with spaces. The number indicates the
       number of spaces	used for indentation. A	"t" indicates tabs. The	number
       after the "t" indicates the number characters each level	of indentation
       corresponds to.	A "u" indicates	that the indenation style could	not be
       determined.  Finally, an	"m" followed by	a number means that this many
       characters are used for each indentation	level, but the indentation is
       an arbitrary number of tabs followed by 0-7 spaces. This	can happen if
       your editor is stupid enough to do smart	indentation/whitespace
       compression. (I.e. replaces all indentations many tabs as possible but
       leaves the rest as spaces.)

       The function supports parsing of	"vim" modelines. Those settings
       override	the heuristics.	The modeline's options that are	recognized are
       "sts"/"softtabstob", "et"/"noet"/"expandtabs"/"noexpandtabs", and

       Similarly, parsing of "emacs" Local Variables is	somewhat supported.
       "parse" use explicit settings to	override the heuristics	but uses style
       settings	only as	a fallback. The	following options are recognized:
       "tab-width", "indent-tabs-mode",	"c-basic-offset", and "style".

       There is	one named option that you can pass to "parse()": "skip_pod".
       When set	to true, any section of	POD (see perlpod) will be ignored for
       indentation finding. This is because verbatim paragraphs	and examples
       embedded	in POD or quite	often indented differently from	normal Perl
       code around the POD section. Defaults to	false. Example:

	 my $mode = Text::FindIndent->parse(\$text, skip_pod =>	1);

       A class method that converts the	output of "parse(\$text)" into a
       series of vi(m) commands	that will configure vim	to use the detected
       indentation setting. Returns zero (failure) or more lines of text that
       are suitable for	passing	to "VIM::DoCommand()" one by one.

       As a convenience, if the	argument to "to_vim_commands" doesn't look
       like the	output of "parse", it is redirected to "parse" first.

       To use this, you	can put	the following line in your .vimrc if your vim
       has Perl	support. Suggestions on	how to do this in a more elegant way
       are welcome.  The code should be	on one line but	is broken up for

	 map <F5> <Esc>	:perl use Text::FindIndent;VIM::DoCommand($_) for
	 Text::FindIndent->to_vim_commands(join	"\n", $curbuf->Get(1..$curbuf->Count()));<CR>

       (Patches	to implement the equivalent for	emacs would be welcome as

       Bugs should be reported via the CPAN bug	tracker	at


       For other issues, contact the author.

       Steffen Mueller <>

       Adam Kennedy <>

       Copyright 2008 -	2010 Steffen Mueller.

       Copyright 2008 -	2010 Adam Kennedy,

       This program is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself.

       The full	text of	the license can	be found in the	LICENSE	file included
       with this module.

perl v5.32.0			  2011-01-04		   Text::FindIndent(3)


Want to link to this manual page? Use this URL:

home | help