You want to turn off the following highlighting features: Syntax Highlighting Search Highlighting Matching Parentheses, Brackets, Etc. Highlighting You can do the following from within vim: :set syntax=off :set nohlsearch :NoMatchParen Or, if you'd rather do it permanently, you can add the following to your .vimrc file: syntax off set nohlsearch :let loaded_matchparen = 1
From within vim, you can do: :set noai Another way to do it is, just before you do the paste, do a: :set paste Then immediately afterword do a: :set nopaste An alternative method would be to do a: :r! cat /dev/tty [paste here] ^D But, keep in mind that /dev/tty must be your current tty device. (In other words, it works on Linux, your mileage may vary. :)
You can do the following from within vim: :setlocal formatoptions-=ro Or, if you'd rather do it permanently, you can add the following to your .vimrc file: autocmd FileType * setlocal formatoptions-=ro
From within vim, do the following: :set fileformat=XYZ Where XYZ is one of "unix", "dos", "mac". Unix EOL = LF (linefeed, newline, \n) DOS EOL = CRLF (carriage-return+linefeed, return+newline, \r\n) Mac EOL = CR (carriage-return, return, \r)
Of course, you can use the mouse. But if you're a touch-typist who prefers using the keyboard like I do, you can still do it. In command mode, an uppercase V will start the visual highlighting mode, which allows you to highlight one or more lines, using command mode movement keys. Once highlighted, you can yank them into the clipboard using: "+y
The short answer is: You can't. This excerpt from O'Reilly's "Learning the vi Editor" points out the grim reality of tab stops in vi: vi attempts to be smart when doing indenting. Usually, when you see text indented by eight spaces at a time, vi will actually insert tab characters into the file, since tabs usually expand to eight spaces. This is the UNIX default; it is most noticable when you type a tab during normal input, and when files are sent to a printer -- UNIX expands them with a tab stop of eight spaces. If you wish, you can change how vi represents tabs on your screen, by changing the tabstop option. For example, if you have something that is deeply indented, you might wish to have use a tab stop setting of every four characters, so that the lines will not wrap. The following command will make this change: :set tabstop=4 NOTE: Changing your tab stops is not recommended. Although vi will display the file using an arbitrary tabstop setting, the tab characters in your files will still be expanded using an eight-character tab stop by every other UNIX program. Eight-character tab stops are one of the facts of life on UNIX, and you should just get used to them.
From the vim doc: *'tabstop'* *'ts'* 'tabstop' 'ts' number (default 8) local to buffer Number of spaces that a <Tab> in the file counts for. Also see |:retab| command, and 'softtabstop' option. Note: Setting 'tabstop' to any other value than 8 can make your file appear wrong in many places (e.g., when printing it). There are four main ways to use tabs in Vim: 1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4 (or 3 or whatever you prefer) and use 'noexpandtab'. Then Vim will use a mix of tabs and spaces, but typing Tab and BS will behave like a tab appears every 4 (or 3) characters. 2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use 'expandtab'. This way you will always insert spaces. The formatting will never be messed up when 'tabstop' is changed. 3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a |modeline| to set these values when editing the file again. Only works when using Vim to edit the file. 4. Always set 'tabstop' and 'shiftwidth' to the same value, and 'noexpandtab'. This should then work (for initial indents only) for any tabstop setting that people use. It might be nice to have tabs after the first non-blank inserted as spaces if you do this though. Otherwise aligned comments will be wrong when 'tabstop' is changed. *'expandtab'* *'et'* *'noexpandtab'* *'noet'* 'expandtab' 'et' boolean (default off) local to buffer {not in Vi} In Insert mode: Use the appropriate number of spaces to insert a <Tab>. Spaces are used in indents with the '>' and '<' commands and when 'autoindent' is on. To insert a real tab when 'expandtab' is on, use CTRL-V<Tab>. See also |:retab| and |ins-expandtab|. NOTE: This option is reset when 'compatible' is set. *'shiftwidth'* *'sw'* 'shiftwidth' 'sw' number (default 8) local to buffer Number of spaces to use for each step of (auto)indent. Used for |'cindent'|, |>>|, |<<|, etc. *'smarttab'* *'sta'* *'nosmarttab'* *'nosta'* 'smarttab' 'sta' boolean (default off) global {not in Vi} When on, a <Tab> in front of a line inserts blanks according to 'shiftwidth'. 'tabstop' is used in other places. A <BS> will delete a 'shiftwidth' worth of space at the start of the line. When off a <Tab> always inserts blanks according to 'tabstop'. 'shiftwidth' is only used for shifting text left or right |shift-left-right|. What gets inserted (a Tab or spaces) depends on the 'expandtab' option. Also see |ins-expandtab|. When 'expandtab' is not set, the number of spaces minimized by using <Tab>s. NOTE: This option is reset when 'compatible' is set. *'softtabstop'* *'sts'* 'softtabstop' 'sts' number (default 0) local to buffer {not in Vi} Number of spaces that a <Tab> counts for while performing editing operations, like inserting a <Tab> or using <BS>. It "feels" like <Tab>s are being inserted, while in fact a mix of spaces and <Tab>s is used. This is useful to keep the 'ts' setting at its standard value of 8, while being able to edit like it is set to 'sts'. However, commands like "x" still work on the actual characters. When 'sts' is zero, this feature is off. 'softtabstop' is set to 0 when the 'paste' option is set. See also |ins-expandtab|. When 'expandtab' is not set, the number of spaces is minimized by using <Tab>s. The 'L' flag in 'cpoptions' changes how tabs are used when 'list' is set. NOTE: This option is set to 0 when 'compatible' is set. My NOTE: When you set expandtab, all tabs entered will be converted to the number of spaces tabstop is set to. However any tabs entered prior to setting expandtab will be left as tab characters unless you use the :retab command. Also, to enter a true tab character, you will have to use ^V (Ctrl-V).
autocmd FileType * set tabstop=2|set shiftwidth=2|set noexpandtab autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab set softtabstop=4 " makes the spaces feel like real tabs OR autocmd BufEnter *.py set ai tw=79 sw=4 ts=4 sta et fo=croql Meaning: ai = AutoIndent tw=79 = Set textwidth=79 (Auto-wrap lines greater than textwidth) sw=4 = Set shiftwidth=4 (Number of spaces a shift will use) ts=4 = Set tabstop=4 (Number of spaces a Tab uses) sta = Does ":tag[!] [tagname]" and splits the window for the found tag et = Set expandtab (Expands Tabs to spaces - see ts=4 above) fo=croql = Set formatoptions to croql c = Auto-wrap comments with textwidth, auto-insert comment char r = Auto-insert comment char after <Enter> in Insert mode o = Auto-insert comment char after Opening in Normal mode q = Allow formatting comments with "gq" l = Long lines aren't broken in Insert mode NOTE: Alternately, you can use the following modeline in your Python code files: # vim: set ai tw=79 sw=4 ts=4 sta et fo=croql:
Modelines are a potentially dangerous feature that allows vi/vim settings to be listed inside a text file by putting them within the first or last five lines of the text. From the vim doc: *modeline* *vim:* *vi:* *ex:* *E520* There are two forms of modelines. The first form: [text]{white}{vi:|vim:|ex:}[white]{options} [text] any text or empty {white} at least one blank character (<Space> or <Tab>) {vi:|vim:|ex:} the string "vi:", "vim:" or "ex:" [white] optional white space {options} a list of option settings, separated with white space or ':', where each part between ':' is the argument for a ":set" command Example: vi:noai:sw=3 ts=6 The second form (this is compatible with some versions of Vi): [text]{white}{vi:|vim:|ex:}[white]se[t] {options}:[text] [text] any text or empty {white} at least one blank character (<Space> or <Tab>) {vi:|vim:|ex:} the string "vi:", "vim:" or "ex:" [white] optional white space se[t] the string "set " or "se " (note the space) {options} a list of options, separated with white space, which is the argument for a ":set" command : a colon [text] any text or empty Example: /* vim: set ai tw=75: */ The white space before {vi:|vim:|ex:} is required. This minimizes the chance that a normal word like "lex:" is caught. There is one exception: "vi:" and "vim:" can also be at the start of the line (for compatibility with version 3.0). Using "ex:" at the start of the line will be ignored (this could be short for "example:"). My NOTE: Bear in mind that to enable modeline support in vim, you must use 'set modeline' (or ml for short) in your vimrc or from within a vim session. Other Examples: /* * vi:set sw=4 ai: * vi:set showmatch: */ --- # vim: set expandtab: --- // vim: noai:ts=4:sw=4 -or- /* vim: noai:ts=4:sw=4 */ -or- /* vim: set noai ts=4 sw=4: */ -or- /* vim: set fdm=expr fde=getline(v\:lnum)=~'{'?'>1'\:'1': */ --- /* vim: set ts=8 sw=4 tw=0: */ --- /* vim: set filetype=c shiftwidth=4 expandtab textwidth=80 : */ OR /* vim: set ft=c sw=4 et tw=80 : */
For vim: /* vim: set noai nosm tw=76: */ Meaning: noai = No AutoIndent nosm = No ShowMatch, don't show matching ([{ tw=76 = Set text width to 76 columns
".vimrc (or /etc/vim/vimrc.local, etc.) "JRWZ: I *use* modelines! set modeline set modelines=5 "JRWZ: autoindent sucks! set noai "JRWZ: so does highlight searching! set nohlsearch "JRWZ: and likewise with parentheses matching! :let loaded_matchparen = 1 "JRWZ: I live in the Americas, so I prefer US Letter paper size. "JRWZ: I also prefer no duplex printing "JRWZ: And I prefer and no line numbers on printouts set printoptions=paper:letter,duplex:off,number:n "JRWZ: Turn off the annoying auto-comment "feature"! if has("autocmd") autocmd FileType * setlocal formatoptions-=ro endif
:help holy-grail
From within a vim session... First, check the contents of the 'printoptions' variable: :set printoptions If there is no 'number:' entry, add it: :set printoptions+=number:y