* Kris Maglione <maglion...@gmail.com> [2009-11-04 08:03]: > On Sun, Nov 01, 2009 at 02:01:06PM -0500, John Yates wrote: >> What made this mechanism so pleasant to use was that all >> text areas in the screen (editing buffers, input panes, >> and output transcripts) shared a common set of editing key >> bindings, similar to vi or emacs. A very common idiom was >> to list a directory, switch the input pane to disconnected >> mode, copy the directory listing to the input pane, modify >> that copy of the listing using some regular expression >> substitutions to turn it into one or more commands on >> each file, and revert the input pane to connected mode. >> >> Obviously in any *nix environment one can do the same thing >> by redirecting the output from ls to a file, open that file >> in an editor, modifying it, saving it, and finally sourcing >> the edited file in one's shell. The input pane mechanism >> simply made such operations faster and more intuitive: >> no inventing a file name, no opening a separate editor, >> no issuing a source command to one's shell. > > This actually isn't especially difficult to do > in vim or some other editor. In vim alone, > for instance, you can do something like, > > :r !ls > :v/\.js/d|s/^/rm / > :w !sh
i have used these command so often that i keep wondering how else you can survive the day without many workarounds. ;-) for those who havent used vi much, here is a breakdown of the commands: :r !ls reads (:r) into buffer via a shell (!) the output of a list (ls) command. :v/\.js/d|s/^/rm / :v for all non-matching lines applied to contents ".js" d delete | command separator s substitute ^ the beginning of the line rm with "rm " (inserting it) :w write !sh to a shell calling a shell the last one is a little redundant, but, hey, it gets the job done. there you should have your list of "rm" commands applied to all non-js files, execute by a shell. mind you, the commands all apply to basic vi - so *all* vi clones support this. nothing fancy. the zsh people would do the removal using patterns with *exeptions8 which requires "extended globbing": % setopt extendedglob % rm *(.)~*.js the pattern works like this: *(.) all files ~ except *.js files ending in ".js" see also: % man zshexpn /FILENAME GENERATION /Glob Operators x~y (Requires EXTENDED_GLOB to be set.) Match anything that matches the pattern x but does not match y. .. Multiple patterns can be excluded by ‘foo~bar~baz’. i am pretty sure some of you would ask for "multiple exclusions". ;-) > Most shells let you edit your commandline with an editor, > too. For instance, FreeBSD's sh(1) allows this with <Esc>v > by default, in vi mode. There's an edit-command-line > script for zsh, and I assume something similar for bash. within zsh, you can edit the last command using the "fc" builtin. and you can use your favourite editor by setting FCEDIT: % FCEDIT=vim % fc the fc command is quite powerful. read all about it with "man zshbuiltins" and "/SHELL BUILTIN COMMANDS" (where "/foo" is the search command which not only exits in vi but also within "less" and "more" as pagers, too). Sven -- www.vim.org www.zsh.org www.zshbuch.org