On Tue, May 27, 2008 at 8:26 PM, James Widman <[EMAIL PROTECTED]> wrote:
>
> Hi all,
>
> An occasionally-recurring annoyance when using the normal-mode command
>  > is that, by default, it has no effect on lines that begin with
> '#'.  The documentation for that command is followed by this
> explanation:
>
>         If the 'smartindent' option is on, or 'cindent' is on
>         and 'cinkeys' contains '#', shift right does not affect
>         lines starting with '#' (these are supposed to be C
>         preprocessor lines that must stay in column 1).
>
> This rule about '#' needing to appear in the first column to begin a C
> preprocessor directive does not come from any of the ISO C (89 or 99)
> or ISO C++ language rules.  Instead, the ISO standards state that the
> '#' that begins a preprocessor directive must be the first *non-white
> space, non-horizontal-tab character* following the beginning of the
> source file or following the last new-line character.
>
> The bogus first-column rule is not even specified in the first edition
> of K&R.  Presumably this behavior was put in place to cope with a
> preprocessor bug in some old compiler.  However, ISO conformance is
> pretty ubiquitous these days, so having '0#' by default in cinkeys is
> now an anachronism.  It should be removed because it can cramp
> people's styles.  For example, some people like to indent
> conditionally-compiled code as in:
>
> #ifdef A
>         #ifdef FOO
>                 #define BAR 1
>         #else
>                 #define BAR 2
>         #endif
> #else
>         #define BAR 3
> #endif /* A */
>
> int n = BAR; /* ok */
>
> Another example:  there are lots of cases where a single macro
> definition spans multiple physical lines, and some of those lines may
> begin with uses of the # operator; e.g.:
>
> #define STR( a, b )     \
>         #a              \
>         #b
>
> const char * s = STR( asdf, qwer ); /* ok */
>
> It's quite natural to add indentation as we see in the definition of
> STR(), but neither '>' nor '=' have the desired effect.  I can live
> with '=' not doing what I want, but '>' should at least obey.  We get
> that behavior with the aforementioned removal of '0#'.

While I totally dislike putting preprocessor directives in the first
column, I doubt this will be changed as this could break compatibility
with previous versions. Moreover, it's just one line in your .vimrc to
get the behavior you want.

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui