On Sat 22 May 04, 12:02 PM, Bryan Richter <[EMAIL PROTECTED]> said: > Issac Trotts wrote: > > As an example, suppose I've written some Python code with a comment > > > > # Assorted verbiage here > > > > and then decide to indent it. I position my cursor on the line and > > press the magic vim key sequence >>. Nothing happens. I go to other > > lines not beginning with '#' and do the same thing. They get indented. > > I assume Bram Moolenar didn't do this as a practical joke, so it's a > > mystery to me... Can someone tell me the rationale, and how to make it > > do what I want anyway? > > > > Well, that doesn't happen to me, even when editing Python code. I have > all the default syntax files that come with vim on Debian Unstable, and > I haven't coded in Python yet so I just found some random script that is > part of some package and tried it on that. I can imagine that some odd > combination of tabstops, shiftwidths, etc. would lead to some weirdness. > Personally, I use > > set nocompatible > set tabstop=4 > set shiftwidth=4 > set expandtab > > in my ~/.vimrc > > -Bryan
This is a subject I don't know much about because it's awfully confusing, but I'll tell you what I (think I) know. There are 3 indentation modes in Vim: 1. cindent 2. smartindent 3. autoindent The thing that makes it so confusing is that they're not mutually exclusive. You'd think they would be. However, you can have all three or any combination of two set. In order to set any one of these indentation modes, you use the ex "set" command. To unset any of them, you'd use the ex "set" command but with the "no" qualifier, like this: :set cindent % Set cindent indentation mode. :set nosmartindent % Unset the smart indentation mode. First of all, unset all the modes: :set nocindent :set smartindent :set autoindent And type this: This is not a Python comment This is not a Python comment # This is a Python comment # This is a Python comment This is not a Python comment Highlight the whole thing and use >> to indent it. You'll see this: This is not a Python comment This is not a Python comment # This is a Python comment # This is a Python comment This is not a Python comment Which is exactly what you want. However, you don't get any of the groovy automatic indentation that Vim is capable of. Now type u to undo the indentation and type: :set cindent And try the same thing. You'll see: This is not a Python comment This is not a Python comment # This is a Python comment # This is a Python comment This is not a Python comment Which isn't what you want. The reason for this is that the cindent indentation mode is for, well, C programs. :-) Preprocessor statements don't have to be in column 0 but at some point they used to (see -Wtraditional of the gcc man pages). OK. Undo the indenting, turn off cindent and turn on smartindent. u :set nocindent :set smartindent Try our experiment again. This is what you'll get: This is not a Python comment This is not a Python comment # This is a Python comment # This is a Python comment This is not a Python comment Again, not what you want. Undo the indenting, turn off smartindent and turn on autoindent: u :set nosmartindent :set autoindent And try again: This is not a Python comment This is not a Python comment # This is a Python comment # This is a Python comment This is not a Python comment This is what you want. This is pretty much all I know. All three modes can be turned on at the same time, and I have ZERO idea how they interact with each other. One of these days, I'm going to have to roll up my sleeves and really read about this more. Anyway, you may want to do something like: au BufNewFile,BufRead *.py set nocindent au BufNewFile,BufRead *.py set nosmartindent au BufNewFile,BufRead *.py set autoindent But cindent may do something for Python programming that autoindent doesn't. You'll want to play around with this a bit. There are ways to fine tune all this stuff. The vim help pages (which I don't consider as good as most people say they are, but I'll admit they are complete) will have details about fine tuning these modes. In particular, you'll want to look at cinoptions, indentexpr, cinkeys, cinwords and other things. Whew! Hope this helped! :-) Pete -- GPG Instructions: http://www.dirac.org/linux/gpg GPG Fingerprint: B9F1 6CF3 47C4 7CD8 D33E 70A9 A3B9 1945 67EA 951D Good, Fast, Cheap. Pick any two (you can't have all three) --- RFC 1925: The Twelve Networking Truths (The 7th truth) _______________________________________________ vox-tech mailing list [EMAIL PROTECTED] http://lists.lugod.org/mailman/listinfo/vox-tech