home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1999-09-25 | 24.7 KB | 466 lines | [ TEXT/VIM!]
" vm: set com=b\:\" tw=79 fo=croq2 : " " File manager macros for Vim 5 (UNIX only) " " Author: Ra'ul Segura Acevedo <raul@turing.iquimica.unam.mx> " Last modified: 971219 (1997 Dec 19) " Suggestion: Add the command "so filename" in your ~/.vimrc " (where filename is the name of this file). " " " To get the last version send a mail to <raul@turing.iquimica.unam.mx> with " SUBJECT: "send file manager macros 5 uuencoded". " or if you are sure your mail system doesn't split long lines use: " SUBJECT: "send file manager macros 5". " To get the version for vim4.5 and vim 4.6 use: " SUBJECT: "send file manager macros uuencoded". " SUBJECT: "send file manager macros". " " User commands from any buffer: " _ls loads vim's current directory. " _LS loads the current file's directory. (it doesn't work on a [No File]). " " or 'edit' the directory ("vim /tmp", or from vim with ":e .", ":sp ~/bin", " " Magic Keys: " " In normal mode: " " _H Show keys/functions table. " <Return> On a file entry. Loads the file/directory. " <Return> On a line starting with ":" executes the line as a :-command. " <Return> On any other line. Executes the 'listing command' (such as " ":r!/bin/ls -lLa /home/user", displayed on line 1) " <C-N> Moves the cursor to the next file entry. " ([count]<C-N> also works: 9<C-N>) " <C-P> Moves the cursor to the previous file entry. " ([count]<C-P> also works: 9<C-P>) " o Same as <Return> but it splits the window first. " U Loads the parent directory. (The current buffer is not deleted). " R Refresh (executes the 'listing command'). " Q Quit. " " % (Un)Tag a file entry. It can be used alone on the current line, " or from the visual to toggle the tag of the highlighted lines. " The easiest way to untag all the files is pressing "R" (refresh) " " The next commands create a new window which prompts the user to execute a " command on the "selected files". Where "selected files" means: " 1) The highlighted files under visual mode. " 2) If you are not in visual mode, the files tagged with % (a % is " showed at the beginning of the lines) " 3) If there are no tagged files, the file entry in the current line " 4) If there is no file entry in the current line either, then the " macros' working directory. " To execute the command type "done", if no messages (errors) are returned then " the window is deleted, otherwise the window displays those messages and "u" " (undo) can be used to get back the previous contents of the buffer. " "Q" can be used to quit without executing the command. " " _CP Copy the file(s) to another place. " _MV Move the file(s) to another place. " _LN Link the file(s) to another place. " _SLN (Symbolic) Link the file(s) to another place. " _MK Make directories (the given files are used as a template) " _CM Change the file(s) mode (chmod). " _CO Change the file(s) owner (chown). " _CG Change the file(s) group (chgrp). " _RM Remove the file(s) (directories have to be empty) " _RF Remove (force) the file(s) (rm -rf is used, directories are " removed recursively). BE CAREFUL with this one. " _SH This macro just list the given files/directories and the " macros' working directory, so you can use those names with any " command you wish, say tar, gzip, or whatever. " " In insert mode: " <Return> Exits insert mode and does the same as <Return> in normal mode. " <Tab> Expands filenames. " (These commands are useful to edit the listing-command.) " " In the GUI version: " <2-LeftMouse> Same as "o" (Split window and open file/dir) " <C-LeftMouse> Same as "%" (Togle Tag) " <C-LeftDrag> Toggle-Tag files as the mouse pass over them. " All the commands can be executed from the "LS" menu. " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Syntax highlighting " " In a directory window the filenames are highlighted depending on the type of " file. There are two sets of colors, one similar to linux's ls-color, and " other to the default ls-color. " " To always use the linux set, uncomment the following line: " let ls_syntax_linux=1 " To always use the normal set, uncomment the following line: " let ls_syntax_linux=0 " If ls_syntax_linux is not set the linux colors are used if and only if there " is an enviroment variable $OSTYPE set to "linux" " " Type Linux Set Normal Set " " Directory blue green " Symbolic link cyan cyan " Named pipe (FIFO) brown red " Socket magenta yellow " Block/Char. Device yellow white on a blue background " Executable green magenta """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " The internal macros start with "__" and end with "-". " " __CQ- quotes all the shell metacharacters (see comment just above the macro " to see exactely which chars. are quoted) in the given lines so each " line can be seen as a single pathname. (normally used just in the " current line: 1__CQ-) the line must start with a space. cursor: ends " in col. 1. pattern: :-search (& therefore last-search too), replace. " " __LS- the given lines have pathnames, it strips the first occurrence of " the following "words": (anything might be before or after them) " //something//../ -> / (// means at least 1 / in a row) " //../ -> / (//../ at the beginning of the pathname) " (// means at least 1 / in a row) " //./ -> / (// means at least 1 / in a row) " // -> / (// means at least 2 / in a row) " cursor: same line, but might end on column 1. pattern: all. " " __L1- Adds the 'listing command' (:r!/bin/ls -lLa <dir>) in line 1, which is " always needed to get the (macro's) working directory. <dir> is quoted " with __CQ-. cursor: line 1, just before the dir. name. register:-," " " __L1C- checks if the first line is a :-command, calls __L1- if not. Calls " __LS- to strip the dir. name. (an aux. map is used: __L-) " cursor: line 1, might end in col 1. register: -," (iff _L1- called). " pattern: search patterns changed. " " __LC- this macro is executed on a line which starts with ":", assuming it " is a :-command to list files, the line is *copied* (to ensure there " are at least 2 lines in the buf.) to the first line, a message is " printed in the second line and all the other lines are removed. Then " the :-command is executed. Finally it adds a / to the directories " names, inserts 2 spaces before every file entry, and :set's nomod. " cursor: last file entry (last line). pattern: all. pattern: all. " register: .(msg), 0 (listing com.), 1 and " (previous buf. contents) " " __LBD- It creates a normal-command to display the file whose name appears in " the current line (it is inserted in the command line later using ^R-, " this way special vim-char. wont be interpreted as commands, say ^M) " and deletes the current buf. register: . " " __LK- It creates a normal-command to undo the changes and display the file " whose name appears in the current line (it is inserted in the command " line later using ^R-, this way special vim-char. wont be interpreted " as commands, say ^M) The listing buffer is kept. register: . " " __LF- called when <CR> is typed in a line which looks like a file entry, it " expects the filename in register 0 (yank), the listing command on line " 1 (to get the dir. name), and a macro __LFP- mapped to either __LBD- " or __LK- depending on whether the current buf. is going to be deleted " or kept. First, it removes everything but the dirname from line 1, It " quotes the filename, adds the dir. if needed, __LS-strips it, loads " that file by executing the command generated by __LFP- and finally " shows the file info (:f), note that it explicitly jumps to line 1 to " avoid "Press return" msgs. cursor: col 1. (not sure), line 1. " register: ", - (loading command). patterns: all. " " __LN- looks forward for a filename, if the cursor is at the start of a line " with a file entry, then this macro moves the cursor to the beginning " of the filename, (note that 3E2l must not be replaced with 4W or the " macro will get confused with filenames starting with spaces/tabs) " cursor: beginning of a filename (hopefully). pattern: last search. " " __LWh- sets [Wh]ich action will be done by the macro __LD- depending on " whether the current line looks like a file entry, a :-command, or " none (when "none", the listing command is executed) finally calls " __LD-. patterns: all. registers: depend on __LD- " " _H Open a new window to display the key/function table. " " % it toggles the tag (leading % char.) of the selected lines (default " just the current, but it can be used from the visual) " cursor: below the end of the selected area. patterns: all. " " __LSC- (shell command) marks the current line (y) so the cursor goes back to " there just before leave the buffer. Puts the current line, and all " the tagged ones in register l, the listing command is yanked, then " :splits another window, (named: /Command(from_%):_<command name from " macro __L_C->, if it already exists then its previous contents are " kept), pastes the register l as the first paragraph and the second " paragraph starts with a white space followed by the macros' working " directory (gotten from the listing command) this line is marked (also " "y", but remember we R in a different buffer now) and yanked (without " the trailing NL) and finally the macro __CI- is called. After that " the first paragraph has quoted full pathnames with a leading white " space, the second paragraph is not modified by __CI-, instructions are " inserted automatically at the end of the buffer when it is created. " cursor: first line, column 1, of a new window. pattern: all. " registers: ", l, 0, -, ., % " " __LCM- This macroS (normal & visual) are called from _CP, _MV, etc. to map " __L_C- to the name of the command to be displayed in the status line " and to define __LG- to either ":g/^%/" or ":'<,'>g/^[ %]/" to be used " later in __LSC- to pick the tagged files or the files in the visual " respectively. " " _CP, _MV, _LN, _SLN " these macros first call __LCM- and __LSC to create a new window which " prompts the user to copy/move/link/symbolic-link the given files " (files in the visual, if not called from the visual (normal then) the " tagged files, if there are none, the file on the current line, if it " doesn't list a file then the (macros') working directory:) to the " (macro's) working directory. The cursor is left at the end of working " directory name so it can be easily edited. registers: l, ", 1, -. " patterns: all. " " _RF call __LSC to create a new window which prompts the user to delete " the given files, and directories. rm -rf is used!! " directories are removed recursively. " _RM same as _RF but it uses rm on files and rmdir on directories, (so " directories must be empty) " " _MK call __LSC to create a new window which prompts the user to create " directories (the given files are used as a template) " " _CM (_CHM), _CG (_CHG), _CO (_CHO) " these macros call __LSC to create a new window which prompts the user " to chmod/chgrp/chown the given files. The cursor is left between the " command and the first filename where an argument must be inserted. " " _SH call __LSC to create a new window which shows the given files first, " then the given directories (separated with an empty line) and finally " the macros' working directory, so the user can pass those names to any " command. (":.g/./" can be used to check if there are directories, and " ":1g/./" to check if there are files) cursor: on the directories " paragraph (or on the second empty line if there were no directories) " " <CR> in insert-mode goes to normal mode and then execute the normal-mode's " macro <CR>. " <Tab> in insert mode, expands file names. " " <CR> normal-mode set __LFP- to __LBD-, and then calls __LWh- which means " that a new file/directory is going to be loaded and the current " buffer will be removed. " on a line with a file entry, that file (or directory) is loaded. " on a line starting with : that line is executed as a :-command. " on any other line the 'listing command' (normally on line 1) is executed. " " __L:- Shows in the command mode line the contents of the file from the cursor " position to the end of the line. Used by <C-N>, <C-P> and BufEnter to " remove the garbage in that line showing the current filename entry. " " <C-N> moves the cursor to the next line, and then calls __LN- from the " beginning of the line to jump to the next file name. calls __L:-. " [count]<C-N> works too. " " <C-P> moves the cursor to the previous line, and then calls __LN- from the " beginning of the line to jump to the next file name. calls __L:-. " [count]<C-P> works too. " " o set __LFP- to __LK- and then calls __LWh-, so works like <CR> but " doesn't destroy the current buffer. It splits the window too. " " U loads parent directory. (current buffer is not deleted) it first " checks for the listing command and deletes everything after the last / " adds a ../ at the end of the line, strips the directory's name, and " executes the listing command, finally the buffer's name is set " accordingly to the directory's. and the cursor is left in the first " file entry. " " Q quit " " R refresh. before the refresh: if the current line has a file entry then " just the filename is used, in any case, the search-metacharacters in " the line are quoted, the line is yanked in register "l" (lower L) and " the changes undone, after the refresh the cursor is in the last line, " it is then moved to the last column where a backward search starts " looking for the former current line or the "^:" which always exists in " line 1, finally, a dummy ":" command is executed to clean the last " message. " " __+- refresh. call R and then sets mark `. Called by the /Command*'s " macro "done" (m`__+-``). This is the only internal macro without a L/C " in it's name. That's because when "__+-" is interpreted the cursor " may or may not be in the listing window, so, it has to be harmless in a " "normal" buffer. " " The buffer's refresh is automatically done when it is empty. " The autocommands "." also :set magic tw=0 wm=0 noai nosi nocin nolisp fo= " " " in the buffers /Command* " __CJ- joins the lines in a paragraph without adding or removing any space. " and :set nomod. cursor: first non-blank " __CJD- same as __CJ- but also removes the next line. cursor: last column. " __CJj- same as __CJ- but also joins the next line. cursor: last column. " " done filters the buffer through $SHELL, if no messages (errors) are " returned then the window is deleted, otherwise the window displays " those messages and "u" (undo) can be used to get back the previous " contents of the buffer. Finally, "m`__+-``" is executed, it is " harmless in a normal buffer, but in the listing window it refreshes " the listing. note that in a normal buffer, if the cursor is in the " last line then m`__+-`` moves the cursor to the beginning of the line. " " Q quit. " <Tab> insert-mode expand filenames. " <CR> insert-mode exits insert-mode. " " __CB- prints a banner at the end of the buffer giving instructions. " the cursor is left at the end of the buffer. " " __CI- (called from __LSC-) it gets what was the listing buffer's current " line in line 1, the tagged lines (if any) from line 2 on, the macros' " working directory in the next paragraph (marked y) and in registers 0 " and ", and the cursor in line 1, then checks line 2, if there are " tagged lines then the first line is removed, after that, if line 1 " doesn't look like a file entry then it is replaced with a dummy entry " to the "./" file so the first paragraph has always a list of file " entries which is then marked with the visual to execute 4 global " commands on it, 1) remove everything but the filename, 2)quote (__CQ-) " those filenames, 3) add the directory name if needed, or some blanks " otherwise (from the yank buffer) and 4) strips (__LS-) the pathnames. " patterns: all. registers: -, 1, ". cursor: in the first paragraph. " " The autocomands for /Command* also :set tw=0 wm=0 noai nosi nocin nolisp fo= " and insert "instructions" in the last line if the last line is empty. " " The /File/manager/keys windows has just 2 maps: " Q delete the window. " R refresh: clears the window and inserts the key/function table. " and :set tw=0 wm=0 noai nosi nocin nolisp fo= " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" aug LS au! " quote this groups of chars: <CR> <space>!"#$&'()* <Tab> :;<=>? [\]^ ` {|}~ au BufEnter .,/Command* no__CQ- :s/[ -* :-?[-^`{-~]/\\&/g<CR> au BufEnter .,/Command* no__LS- :g-\(/\+[^/]*\)\=/\+\.\./\<BAR>/\+\.\=/-s--/-<CR> au BufEnter . nm__L1- O:r!/bin/ls -la /<Esc>hd0"=expand("%:p")<CR>p1__CQ-Plx au BufEnter . nm__L1C- :nm__L- 1G<BAR>1v-^:-nm__L- __L1-<CR>__L-1__LS- au BufEnter . no__LC- yy1GPA<NL>Type _H for a list of commands, see <sfile>:p for details.<Esc>jdG@0:g-^[ 0-9]*d-s-/*$-/<CR>:g/^[^:].*[0-9] \K.. \=[0-9]/s/^/ <CR>:se nomod<CR> au BufEnter . nn__LBD- Cu:e<C-V><C-R>-<Bar>bd#<Esc> au BufEnter . nn__LK- Cu:e<C-V><C-R>-<Esc> au BufEnter . nm__LF- 03xdEdt/$p,D0D"0p1__CQ-:.v-^. /-norm2l"-P0<CR>2x1__LS-0__LFP-y1G@":f<CR>1G au BufEnter . nn__LN- 0/[0-9] \K.. \=[0-9]<CR>3E2l au BufEnter . nm__LWh- :nm__LD- __LC-1G__LN-<Bar>.g/^\([ %] [ 0-9]*l.*\) -> .*/s//\1<CR>:.g/^[ %]/nm__LD- __LF-<BAR>norm __LN-hy$<CR>:.g/^:/t0<CR>__L1C-__LD- au BufEnter . nm_H :5sp!/File/manager/keys<CR>R<C-W>p|map<F1> _H au BufEnter . nm% v%|vn% :g/^%/s//x<CR>:'<,'>g/^ /s//%<CR>:'<,'>g/^x/s// <CR>:se nomod<CR>:"toggle tag"<CR>`>j au BufEnter . nm__LSC- myylpX:.g/^\([ %] [ 0-9]*l.*\) -> .*/s//\1<CR>"lyyuylpX__L1C-yy__LG-<BS> [ 0-9]*l/s/\(.*\) -> .*/\1/<CR>__LG-y L<CR>u`y:5new/Command/__L_C-<BAR>cu <C-V>__L_C-<CR>1G"0Pf!Et/d0yl3Pmy$pT/DyyP0y$D"lP__CI-1G0 au BufEnter . vn__LCM- :g/^[ %]/<Home>nn__LG- :<CR>:cno__L_C- | nn__LCM- :nn__LG- :g/^%/<BAR>cno__L_C- au BufEnter . map_CP __LCM-cp<CR>__LSC-icp<Esc>__CJj- au BufEnter . map_MV __LCM-mv<CR>__LSC-imv<Esc>__CJj- au BufEnter . map_LN __LCM-ln<CR>__LSC-iln<Esc>__CJj- au BufEnter . map_SLN __LCM-ln-s<CR>__LSC-iln -s<Esc>__CJj- au BufEnter . map_RF __LCM-rm-rf<CR>__LSC-irm -rf<Esc>__CJD- au BufEnter . map_RM __LCM-rm<CR>__LSC-'yD:1,-2g-/$-m'y-<CR>:.g--norm {jirmdir<C-V><ESC>__CJ-<CR>:1g/./norm 0irm<C-V><Esc>__CJ-<CR>$ au BufEnter . map_MK __LCM-mk<CR>__LSC-imkdir<Esc>__CJD-T/ au BufEnter . map_CM __LCM-cm<CR>__LSC-ichmod <Esc>__CJD-0e2l|map_CHM _CH au BufEnter . map_CG __LCM-cg<CR>__LSC-ichgrp <Esc>__CJD-0e2l|map_CHG _CG au BufEnter . map_CO __LCM-co<CR>__LSC-ichown <Esc>__CJD-0e2l|map_CHO _CO au BufEnter . map_SH __LCM-sh<CR>__LSC-}yyp:1,-2g-/$-m'y-2<CR>0 au BufEnter . im<CR> <Esc><CR>|ino<TAB> <C-X><C-F> au BufEnter . nm<CR> :nm__LFP- __LBD-<CR>__LWh-|nm o :sp<Bar>nm__LFP- __LK-<CR>__LWh- au BufEnter . nn__L:- y$:"<C-R>""<CR>|nm<C-N> +__LN-__L:-|nm<C-P> -__LN-__L:- au BufEnter . nm U __L1C-A../<Esc>2hdT/1__LS-__LC-1G0f!Ef/y$__LN-:f <C-R>"<CR> au BufEnter . nn Q :bd!<CR> au BufEnter . nm R :.g-^[% ]-norm__LN-d0<CR>__magic0"ly$u__L1C-__LC-$?^:\<Bar> <C-R>l$<CR>l:"refresh"<CR> au BufEnter . se magic tw=0 wm=0 noai nosi nocin nolisp fo= au BufEnter . nm__+- Rm`|nn__L- m`|nn__LFP- m`|nn__LG- m` " [R]efresh only iff the buffer is empty au BufEnter . let b:ls_done=1 au BufEnter . nn__LD- m`|1v/./nm__LD- __L1C-__LC-1G__LN- au BufEnter . norm__LD-__L:- au BufLeave . unm__CQ-|unm__LS-|unm__L1-|unm__L1C-|unm__LC-|unm__LBD-| unm__LK-|unm__LF-|unm__LN-|unm__LWh-|unm__LD-|unm__L-|unm__LFP-|unm_H| iun<CR>|iun<Tab>|nun<CR>|nun__L:-|nun<C-N>|nun<C-P>|nun o|nun U|nun Q| nun R|nun__+-|unm_MK|unm_CP|unm_MV|unm_LN|unm_SLN|unm_RF|unm_RM|unm<F1>| unm__LSC-|unm%|unm_CHM|unm_CHG|unm_CHO|unm_SH|unm__LCM-|unm__LG-|unm_CM| unm_CG|unm_CO au BufLeave . unlet b:ls_done map_ls :sp %:p:h<CR> map_LS _ls au BufEnter /File/manager/keys nn Q :bd!<CR>|nn R :%d<CR>iRa'ul Segura Acevedo <raul@hplara.iquimica.unam.mx><CR>#CR> open <Bar> #C-N> next <Bar> _MV move <Bar> _LN link <Bar> _CO chown<CR>o split&open <Bar> #C-P> previous <Bar> _CP copy <Bar> _SLN sym. link <Bar> _CM chmod<CR>U up dir. <Bar> % tag file <Bar> _RM delete <Bar> _MK make dir. <Bar> _CG chgrp<CR>R refresh <Bar> Q *QUIT* <Bar> _RF rm -rf <Bar> _SH shell free style<CR>Insert mode: #CR> enter #Tab> expand. GUI: #2-clic> split&enter <C-Clic> tag<Esc>:%s/#/</g<Bar>se nomod<CR>Gz- au BufLeave /File/manager/keys nun Q|nun R au BufEnter /Command* nn__CJ- vap:j!<CR>:se nomod<CR> au BufEnter /Command* nn__CJD- vap:j!<CR>JD:se nomod<CR> au BufEnter /Command* nn__CJj- vapj:j!<CR>:se nomod<CR>$ au BufEnter /Command* nm done :%!$SHELL<CR>:g/./"<CR>y$:if@"==""<Bar>norm Qm`__+-``<CR>end "Command Output"<CR>|nn Q :bd!<CR> au BufEnter /Command* ino<TAB> <C-X><C-F>|ino<CR> <Esc> au BufEnter /Command* nn __CB- Gi# Normal mode: Type "done" to execute the command, "Q" to quit.<NL># Insert mode: Tab to expand filenames, Return go to Normal mode.<Esc><<<< au BufEnter /Command* nm__CI- :2g/./1d<CR>:1v-^[% ]-s-.*-6 Nul 6 6 ./<CR>vapk:g/[0-9] \K.. \=[0-9]/norm /<C-V><CR>3Eld0<CR>gv__CQ-:*s/..//<CR>:.g-^/-norm `y0yt/``<CR>gv:g/^/norm "0P<CR>gv__LS- au BufEnter /Command*,/File/manager/keys se tw=0 wm=0 noai nosi nocin nolisp nolist isk=@,-,<,>,48-97 fo= au BufEnter /Command* nn__L- m`|$v/./nm__L- __CB- au BufEnter /Command* norm__L- au BufLeave /Command* unm__CQ-|unm__LS-|unm__CI-|unm__CB-|unm__CJ-|unm__CJj-| unm__CJD-|unm__L-|iu<Tab>|iu<CR>|unm Q|unm done " the next macro comes from my set of emacs-like incremental search macros nn__magic :.g/[[$^.*~\\/?]/s//\\&/g<CR> " GUI stuff if has("gui") au BufEnter . nm<2-LeftMouse> :nm__L- <C-V><CR><CR>:.v-/$-nm__L- o<CR>__L-| nm<C-LeftMouse> <LeftMouse>%|vm<C-LeftMouse> %|nm<C-LeftDrag> <RightDrag>% au BufEnter . ime LS.Expand\ name <Tab>| ime LS.Next\ name <C-N>| nme LS.Next\ name <C-N>| ime LS.Prev\.\ name <C-P>| nme LS.Prev\.\ name <C-P>| nme LS.Open <CR>| ime LS.Open <CR>| nme LS.Split&Open o| nme LS.Up\ dir U| nme LS.Refresh R| nme LS.Close Q| men LS.\ \ | men LS.Toggle\ tag %| men LS.Tag\ all :g/^ /s//%<CR>:se nomod<CR>:"Tag all"<CR>``| men LS.UnTag\ all :g/^%/s// <CR>:se nomod<CR>:"Untag all"<CR>``| men LS.Move _MV| men LS.Copy _CP| men LS.Delete _RM| men LS.Make\ dir _MK| men LS.Link _LN| men LS.Sym\.\ link _SLN| men LS.ChOwn _CO| men LS.ChMod _CM| men LS.ChGrp _CG| men LS.Shell _SH|men LS.\ \ \ |men LS.DelTree _RF au BufLeave . unm<C-LeftMouse>|nun<2-LeftMouse>|nun<C-LeftDrag>|unme LS| nme LS.File's\ dir _LS|nme LS.Vim's\ dir _ls|iunme LS nme LS.File's\ dir _LS nme LS.Vim's\ dir _ls au BufEnter /Command* nme Command.Close Q|nme Command.Execute done if has("gui_athena") au BufEnter /Command* nme Command.sh mm|unme Command.sh au BufLeave /Command* nme Command.sh :sp/Command/sh<Bar>se nomod<CR>|unme Command.Close|unme Command.Execute el au BufLeave /Command* unme Command en endif au BufEnter * if isdirectory(expand("%"))&&!exists("b:ls_done")|do BufEnter .|en au BufLeave * if exists("b:ls_done")|do BufLeave .|en if has("syntax") au BufEnter . if exists("syntax_on") && !has("syntax_items") au BufEnter . sy match LsAny ".*" contains=LsBody au BufEnter . sy match LsExe "^. \S*x.*" contains=LsBody au BufEnter . sy match LsDir "^. d.*" contains=LsBody au BufEnter . sy match LsSln "^. l.* -> "he=e-4 contains=LsBody au BufEnter . sy match LsFifo "^. p.*" contains=LsBody au BufEnter . sy match LsSpl "^. [cb].*" contains=LsBody au BufEnter . sy match LsSock "^. s.*" contains=LsBody au BufEnter . sy match LsBody contained "^.*[0-9] \K\K\K [ 0-3][0-9] [ 0-9]\S* " contains=Tag au BufEnter . sy match Tag contained "^%.*[0-9] \K\K\K [ 0-3][0-9] [ 0-9]\S*" au BufEnter . sy match Comment "^Type _H.*" au BufEnter . sy match Operator "^:.*" au BufEnter . en au BufEnter /File/manager/keys sy match Tag "[<_%]\S*\|\<.\>" au BufEnter /File/manager/keys sy match Comment "[IGN].\{-}:" au BufEnter /Command* sy match Comment "^#.*" contains=Tag au BufEnter /Command* sy keyword Tag contained done Q Tab Return if !exists("did_ls_syntax_inits") let did_ls_syntax_inits = 1 if !exists("ls_syntax_linux") let ls_syntax_linux=$OSTYPE=="linux" en if ls_syntax_linux hi LsDir start=<Esc>[1,34m stop=<Esc>[m ctermfg=blue guifg=blue hi LsSln start=<Esc>[1,36m stop=<Esc>[m ctermfg=cyan guifg=cyan hi LsFifo start=<Esc>[33m stop=<Esc>[m ctermfg=brown guifg=#ffff60 hi LsSock start=<Esc>[1,35m stop=<Esc>[m ctermfg=magenta guifg=Magenta hi LsSpl start=<Esc>[1,33m stop=<Esc>[m ctermfg=yellow guifg=#ffff60 gui=bold hi LsExe start=<Esc>[1,32m stop=<Esc>[m ctermfg=green guifg=green el hi LsDir start=<Esc>[32m stop=<Esc>[m ctermfg=green guifg=green hi LsSln start=<Esc>[36m stop=<Esc>[m ctermfg=cyan guifg=cyan hi LsFifo start=<Esc>[31m stop=<Esc>[m ctermfg=red guifg=Red hi LsSock start=<Esc>[33m stop=<Esc>[m ctermfg=yellow guifg=#ffff60 hi LsSpl start=<Esc>[44,37m stop=<Esc>[m ctermfg=white ctermbg=blue guifg=white guibg=blue hi LsExe start=<Esc>[35m stop=<Esc>[m ctermfg=magenta guifg=Magenta en let b:current_syntax = "ls" endif aug END