# HG changeset patch # User vimboss # Date 1095107192 0 # Node ID 8ff7fd162d3cf15129e377401e49f8210d62aee6 # Parent 3f44e9abe4ec65f797cbd12f1d46bd08eb48c2ef updated for version 7.0016 diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 7.0aa. Last change: 2004 Aug 30 +*eval.txt* For Vim version 7.0aa. Last change: 2004 Sep 13 VIM REFERENCE MANUAL by Bram Moolenaar @@ -930,7 +930,7 @@ synID( {line}, {col}, {trans}) Number sy synIDattr( {synID}, {what} [, {mode}]) String attribute {what} of syntax ID {synID} synIDtrans( {synID}) Number translated syntax ID of {synID} -system( {expr}) String output of shell command {expr} +system( {expr} [, {input}]) String output of shell command/filter {expr} tempname() String name for a temporary file tolower( {expr}) String the String {expr} switched to lowercase toupper( {expr}) String the String {expr} switched to uppercase @@ -1111,7 +1111,7 @@ cindent({lnum}) *cindent()* feature, -1 is returned. *col()* -col({expr}) The result is a Number, which is the column of the file +col({expr}) The result is a Number, which is the byte index of the column position given with {expr}. The accepted positions are: . the cursor position $ the end of the cursor line (the result is the @@ -2653,10 +2653,15 @@ synIDtrans({synID}) *synIDtrans()* highlight the character. Highlight links given with ":highlight link" are followed. - *system()* -system({expr}) Get the output of the shell command {expr}. Note: newlines - in {expr} may cause the command to fail. The characters in - 'shellquote' and 'shellxquote' may also cause trouble. +system({expr} [, {input}]) *system()* *E677* + Get the output of the shell command {expr}. + When {input} is given, this string is written to a file and + passed as stdin to the command. The string is written as-is, + you need to take care of using the correct line separators + yourself. + Note: newlines in {expr} may cause the command to fail. The + characters in 'shellquote' and 'shellxquote' may also cause + trouble. This is not to be used for interactive commands. The result is a String. Example: > diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt --- a/runtime/doc/index.txt +++ b/runtime/doc/index.txt @@ -1,4 +1,4 @@ -*index.txt* For Vim version 7.0aa. Last change: 2004 Jul 11 +*index.txt* For Vim version 7.0aa. Last change: 2004 Sep 07 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1103,6 +1103,7 @@ The commands are sorted on the non-optio |:cunmenu| :cunme[nu] remove menu for Command-line mode |:cwindow| :cw[indow] open or close quickfix window |:delete| :d[elete] delete lines +|:delmarks| :delm[arks] delete marks |:debug| :deb[ug] run a command in debugging mode |:debuggreedy| :debugg[reedy] read debug mode commands from normal input |:delcommand| :delc[ommand] delete user-defined command diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt --- a/runtime/doc/motion.txt +++ b/runtime/doc/motion.txt @@ -1,4 +1,4 @@ -*motion.txt* For Vim version 7.0aa. Last change: 2004 Jul 25 +*motion.txt* For Vim version 7.0aa. Last change: 2004 Sep 07 VIM REFERENCE MANUAL by Bram Moolenaar @@ -732,6 +732,24 @@ g'{mark} g`{mark} :marks aB < to list marks 'a' and 'B'. {not in Vi} + *:delm* *:delmarks* +:delm[arks] {marks} Delete the specified marks. Marks that can be deleted + include A-Z and 0-9. You cannot delete the ' mark. + They can be specified by giving the list of mark + names, or with a range, separated with a dash. Spaces + are ignored. Examples: > + :delmarks a deletes mark a + :delmarks a b 1 deletes marks a, b and 1 + :delmarks Aa deletes marks A and a + :delmarks p-z deletes marks in the range p to z + :delmarks ^.[] deletes marks ^ . [ ] + :delmarks \" deletes mark " +< {not in Vi} + +:delm[arks]! Delete all marks for the current buffer, but not marks + A-Z or 0-9. + {not in Vi} + A mark is not visible in any way. It is just a position in the file that is remembered. Do not confuse marks with named registers, they are totally unrelated. diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt --- a/runtime/doc/pattern.txt +++ b/runtime/doc/pattern.txt @@ -1,4 +1,4 @@ -*pattern.txt* For Vim version 7.0aa. Last change: 2004 Jul 24 +*pattern.txt* For Vim version 7.0aa. Last change: 2004 Sep 07 VIM REFERENCE MANUAL by Bram Moolenaar @@ -431,7 +431,7 @@ Character classes {not in Vi}: */char x x a character with no special meaning matches itself |/[]| [] \[] any character specified inside the [] -|/\%[]| \%[] \%[] a list of optionally matched atoms +|/\%[]| \%[] \%[] a sequence of optionally matched atoms |/\c| \c \c ignore case |/\C| \C \C match case @@ -442,6 +442,12 @@ Character classes {not in Vi}: */char |/\Z| \Z \Z ignore differences in Unicode "combining characters". Useful when searching voweled Hebrew or Arabic text. +|/\%d| \%d \%d match specified decimal character (eg \%d123 +|/\%x| \%x \%x match specified hex character (eg \%x2a) +|/\%o| \%o \%o match specified octal character (eg \%o040) +|/\%u| \%u \%u match specified multibyte character (eg \%u20ac) +|/\%U| \%U \%U match specified large multibyte character (eg + \%U12345678) Example matches ~ \<\I\i* or @@ -988,6 +994,11 @@ x A single character, with no special me \t \r (NOT end-of-line!) \b + \d123 decimal number of character + \o40 octal number of character up to 0377 + \x20 hexadecimal number of character up to 0xff + \u20AC hex. number of multibyte character up to 0xffff + \U1234 hex. number of multibyte character up to 0xffffffff NOTE: The other backslash codes mentioned above do not work inside []! - Matching with a collection can be slow, because each character in @@ -996,7 +1007,7 @@ x A single character, with no special me much faster than "[0-9]" and matches the same characters. */\%[]* *E69* *E70* *E369* -\%[] A list of optionally matched atoms. This always matches. +\%[] A sequence of optionally matched atoms. This always matches. It matches as much of the list of atoms it contains as possible. Thus it stops at the first atom that doesn't match. For example: > /r\%[ead] @@ -1011,6 +1022,17 @@ x A single character, with no special me < Matches the words "r", "re", "ro", "rea", "roa", "read" and "road". {not available when compiled without the +syntax feature} + */\%d* */\%x* */\%o* */\%u* */\%U/* *E678* + +\%d123 Matches the character specified with a decimal number. Must be + followed by a non-digit. +\%o40 Matches the character specified with an octal number up to 0377. + Numbers below 040 must be followed by a non-octal digit or a non-digit. +\%x2a Matches the character specified with up to two hexadecimal characters. +\%u20AC Matches the character specified with up to four hexadecimal + characters. +\%U1234abcd Matches the character specified with up to eight hexadecimal + characters. ============================================================================== 7. Ignoring case in a pattern */ignorecase* diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt --- a/runtime/doc/pi_netrw.txt +++ b/runtime/doc/pi_netrw.txt @@ -1,4 +1,4 @@ -*pi_netrw.txt For Vim version 6.2. Last change: Jul 30, 2004 +*pi_netrw.txt For Vim version 6.2. Last change: Sep 10, 2004 VIM REFERENCE MANUAL by Charles E. Campbell, Jr. @@ -17,9 +17,10 @@ 4. Transparent File Transfer........... 5. Ex Commands.........................................|netrw-ex| 6. Variables and Options...............................|netrw-var| 7. Directory Browser...................................|netrw-browse| -8. Debugging...........................................|netrw-debug| -9. History.............................................|netrw-history| -10. Credits.............................................|netrw-credits| +8. Problems and Fixes..................................|netrw-problems| +9. Debugging...........................................|netrw-debug| +10. History.............................................|netrw-history| +11. Credits.............................................|netrw-credits| The functionality mentioned here is done via using |standard-plugin| techniques. This plugin is only available if @@ -114,17 +115,22 @@ 1. Netrw Reference *netrw-ref* =0 use default ftp (uid password) =1 use alternate ftp method (user uid password) g:netrw_ftpmode ="binary" (default) - ="ascii" (or your choice) + ="ascii" g:netrw_uid (ftp) user-id, retained on a per-session basis g:netrw_passwd (ftp) password, retained on a per-session basis - g:netrw_win95ftp =0 use unix-style ftp even if win95/win98/winME - =1 use default method to do ftp + g:netrw_win95ftp =1 if using Win95, will remove four trailing blank + lines that o/s's ftp "provides" on transfers + =0 force normal ftp behavior (no trailing line + removal) g:netrw_cygwin =1 assume scp under windows is from cygwin + Also permits network browsing to use + ls with time and size sorting (default if windows) - =0 assume scp under windows accepts - windows-style paths (default otherwise) - g:netrw_use_nt_rcp=0 don't use the rcp of WinNT, Win2000 and WinXP (default) - =1 use the rcp of WinNT,... in binary mode + =0 assume Windows' scp accepts windows-style paths + Network browsing uses dir instead of ls + This option is ignored if you're using unix + g:netrw_use_nt_rcp=0 don't use the rcp of WinNT, Win2000 and WinXP + =1 use WinNT's rcp in binary mode (default) PATHS *netrw-path* @@ -167,7 +173,7 @@ transfer/protocol. Files are read from/ clean up. One may modify any protocol's implementing external application -by settinbg a variable (ex. scp uses the variable g:netrw_scp_cmd, +by setting a variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to "scp -q"). Ftp, an old protocol, seems to be blessed by numerous implementations. @@ -529,6 +535,7 @@ 7. Directory Browser *netrw-browse* *net i..........Long Listing............................|netrw-i| ......Refreshing the Listing..................|netrw-ctrl-l| o..........Browsing with a Horizontal Split........|netrw-o| + p..........Preview Window..........................|netrw-p| q..........Listing Bookmarks.......................|netrw-q| r..........Reversing Sorting Order.................|netrw-r| R..........Renaming Files or Directories...........|netrw-R| @@ -542,14 +549,16 @@ QUICK REFERENCE COMMANDS TABLE *n ------- ----------- Command Explanation ------- ----------- - ? Causes Netrw to issue help +< ? Causes Netrw to issue help Netrw will enter the directory or read the file Netrw will attempt to remove the file/directory d Make a directory D Netrw will attempt to remove the file(s)/directory(ies) R Netrw will attempt to rename the file(s)/directory(ies) - Makes Netrw go up one directory - a Show all of a directory (temporarily ignore g:netrw_list_hide) + a Toggles between normal display, + hiding (suppress display of files matching g:netrw_list_hide) + showing (display only files which match g:netrw_list_hide) c Make current browsing directory the current directory Edit file hiding list i Toggles between long and short listing @@ -561,12 +570,18 @@ QUICK REFERENCE COMMANDS TABLE *n v Enter the file/directory under the cursor in a new browser window. A vertical split is used. x Apply a function to a file. -< + NETRW BROWSER VARIABLES *netrw-browse-var* > --- ----------- Var Explanation --- ----------- +< g:netrw_alto change from above splitting to + below splitting by setting this + variable (see |netrw-o|) + g:netrw_altv change from left splitting to + right splitting by setting this + variable (see |netrw-v|) g:netrw_ftp_browse_reject ftp can produce a number of errors and warnings that can show up as "directories" and "files" in the @@ -576,6 +591,10 @@ NETRW BROWSER VARIABLES *netrw-brows browsing directory. The browsing directory is contained in b:netrw_curdir g:netrw_list_cmd command for listing remote directories + g:netrw_ftp_list_cmd options for passing along to ftp for + directory listing. Defaults: + unix or g:netrw_cygwin set: : "ls -lF" + otherwise "dir" g:netrw_list_hide comma separated list of patterns for hiding files g:netrw_local_mkdir command for making a local directory @@ -593,7 +612,7 @@ NETRW BROWSER VARIABLES *netrw-brows comma-separated pattern sequence g:netrw_timefmt specify format string to strftime() (%c) g:netrw_winsize specify initial size of new o/v windows -< + INTRODUCTION TO DIRECTORY BROWSING Netrw supports the browsing of directories on the local system and on remote @@ -711,10 +730,10 @@ the V (|linewise-visual|). HIDING FILES OR DIRECTORIES *g:netrw-a* *g:netrw_list_hide* -The "a" map toggles the netrw vim file browser (both remote and local) between -displaying hidden files (show-all) versus hiding files. For files to be -hidden, the g:netrw_list_hide variable must hold a comma delimited list of -patterns (ex. \.obj) to be hidden from normal listing. (see |netrw-h|) +Netrw's browsing facility allows one to use the hiding list in one of +three ways: ignore it, hide files which match, and show only those files +which match. The g:netrw_list_hide variable holds a comma delimited list +of patterns (ex. \.obj) which specify the hiding list. (also see |netrw-h|) EDIT FILE OR DIRECTORY HIDING LIST *netrw-h* @@ -729,7 +748,20 @@ BROWSING WITH A HORIZONTALLY SPLIT WINDO Normally one enters a file or directory using the . However, the "o" map allows one to open a new window to hold the new directory listing or file. A -horizontal split is used. (also see |netrw-v|) +horizontal split is used. (for vertical splitting, see |netrw-v|) + +Normally, the o key splits the window horizontally with the new window +and cursor at the top. To change to splitting the window horizontally +with the new window and cursor at the bottom, have + + let g:netrw_alto = 1 + +in your <.vimrc>. + +PREVIEW WINDOW + +One may use a preview window (currently only for local browsing) by using +the "p" key when the cursor is atop the desired filename to be previewed. SELECTING SORTING STYLE *netrw-s* @@ -764,7 +796,15 @@ BROWSING WITH A VERTICALLY SPLIT WINDOW Normally one enters a file or directory using the . However, the "v" map allows one to open a new window to hold the new directory listing or -file. A vertical split is used. (also see |netrw-o|) +file. A vertical split is used. (for horizontal splitting, see |netrw-o|) + +Normally, the v key splits the window vertically with the new window +and cursor at the left. To change to splitting the window vertically +with the new window and cursor at the right, have + + let g:netrw_altv = 1 + +in your <.vimrc>. CUSTOMIZING BROWSING WITH A USER FUNCTION *netrw-x* @@ -831,7 +871,66 @@ the associated security issues. ============================================================================== -8. Debugging *netrw-debug* +8. Problems and Fixes *netrw-problems* + + (This section is likely to grow as I get feedback) + (also see |netrw-debug|) + + P1. I use windows 95, and my ftp dumps four blank lines at the + end of every read. + + See |netrw-fixup|, and put the following into your + <.vimrc> file: + + let g:netrw_win95ftp= 1 + + + + P2. I use windows, and my network browsing with ftp doesn't sort by + time or size + + Windows' ftp has a minimal support for ls (ie. it doesn't + accept sorting options). It doesn't support the -F which + gives an explanatory character (ABC/ for "ABC is a directory"). + Netrw uses dir to get its short and long listings. If you + think your ftp does support a full-up ls, put the following + into your <.vimrc>: + + let g:netrw_ftp_list_cmd= "ls -lF" + + Alternatively, if you have cygwin on your Windows box, put + into your <.vimrc>: + + let g:netrw_cygwin= 1 + + P3. I tried rcp://user@host/ (or protocol other than ftp) and netrw + used ssh! That wasn't what I asked for... + + Netrw has two methods for browsing remote directories: ssh + and ftp. Unless you specify ftp specifically, ssh is used. + When it comes time to do download a file (not just a directory + listing), netrw will use the given protocol to do so. + + P4. I would like long listings to be the default. + + let g:netrw_longlist=1 + + P5. My times come up oddly in local browsing + + Does your system's strftime() accept the "%c" to yield dates + such as "Sun Apr 27 11:49:23 1997"? If not, do a "man strftime" + and find out what option should be used. Then put it into + your <.vimrc>: + let g:netrw_timefmt= "%X" (where X is the option) + + P6. I don't want my current directory changing just because I'm + browsing somewhere. + + let g:netrw_keepdir= 1 + + +============================================================================== +9. Debugging *netrw-debug* The script is typically available as: @@ -878,8 +977,37 @@ which is loaded automatically at startup drchipNOSPAM at campbellfamily.biz - NOSPAM ============================================================================== -9. History *netrw-history* +10. History *netrw-history* + v48: * One may use ftp to do remote host file browsing + * (windows and !cygwin) remote browsing with ftp can now use + the "dir" command internally to provide listings + * g:netrw_keepdir now allows one to keep the initial current + directory as the current directory (normally the local + file browser makes the currently viewed directory the + current directory) + * g:netrw_alto and g:netrw_altv now support alternate placement + of windows started with o or v + * Nread ? and Nwrite ? now uses echomsg (instead of echo) so + :messages can repeat showing the help + * bugfix: avoids problems with partial matches of directory names + to prior buffers with longer names + * one can suppress error messages with g:netrw_quiet + * ctrl-h used instead of h for editing hiding list + * one may edit the sorting sequence with the S map + * now allows confirmation of deletion with [y(es) n(o) a(ll) q(uit)] + * the "x" map now handles special file viewing with: + (windows) rundll32 url.dll + (gnome) gnome-open + (kde) kfmclient + If none of these are on the executable path, then + NetrwFileHandlers.vim is used. + * directory bookmarking during both local and remote browsing + implemented + * one may view all, use the hiding list to suppress, or use the + hiding list to show-only remote and local file/directory listings + * improved unusual file and directory name handling + * preview window support v47: * now handles local directory browsing. v46: * now handles remote directory browsing * g:netrw_silent (if 1) will cause all transfers to be silent'd @@ -912,7 +1040,7 @@ 9. History *netrw-history* ============================================================================== -10. Credits *netrw-credits* +11. Credits *netrw-credits* Vim editor by Bram Moolenaar (Thanks, Bram!) dav support by C Campbell diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 7.0aa. Last change: 2004 Sep 01 +*syntax.txt* For Vim version 7.0aa. Last change: 2004 Sep 13 VIM REFERENCE MANUAL by Bram Moolenaar @@ -4014,6 +4014,11 @@ For Unix you can use the file ~/.vim/aft highlight comment ctermfg=green guifg=green endif + *E679* +Do make sure this syncolor.vim script does not use a "syntax on", set the +'background' option or uses a "colorscheme" command, because it results in an +endless loop. + Note that when a color scheme is used, there might be some confusion whether your defined colors are to be used or the colors from the scheme. This depends on the color scheme file. See |:colorscheme|. diff --git a/runtime/doc/tags b/runtime/doc/tags --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -1218,11 +1218,16 @@ /\%>c pattern.txt /*\/\\%>c* /\%>l pattern.txt /*\/\\%>l* /\%>v pattern.txt /*\/\\%>v* +/\%U/ pattern.txt /*\/\\%U\/* /\%[] pattern.txt /*\/\\%[]* /\%^ pattern.txt /*\/\\%^* /\%c pattern.txt /*\/\\%c* +/\%d pattern.txt /*\/\\%d* /\%l pattern.txt /*\/\\%l* +/\%o pattern.txt /*\/\\%o* +/\%u pattern.txt /*\/\\%u* /\%v pattern.txt /*\/\\%v* +/\%x pattern.txt /*\/\\%x* /\& pattern.txt /*\/\\&* /\( pattern.txt /*\/\\(* /\(\) pattern.txt /*\/\\(\\)* @@ -1811,6 +1816,8 @@ 90.5 usr_90.txt /*90.5* :delete change.txt /*:delete* :delf eval.txt /*:delf* :delfunction eval.txt /*:delfunction* +:delm motion.txt /*:delm* +:delmarks motion.txt /*:delmarks* :di change.txt /*:di* :diffg diff.txt /*:diffg* :diffget diff.txt /*:diffget* @@ -3533,6 +3540,8 @@ E673 print.txt /*E673* E674 print.txt /*E674* E675 print.txt /*E675* E676 options.txt /*E676* +E677 eval.txt /*E677* +E678 pattern.txt /*E678* E68 pattern.txt /*E68* E69 pattern.txt /*E69* E70 pattern.txt /*E70* @@ -5476,6 +5485,7 @@ netrw-o pi_netrw.txt /*netrw-o* netrw-options pi_netrw.txt /*netrw-options* netrw-passwd pi_netrw.txt /*netrw-passwd* netrw-path pi_netrw.txt /*netrw-path* +netrw-problems pi_netrw.txt /*netrw-problems* netrw-protocol pi_netrw.txt /*netrw-protocol* netrw-q pi_netrw.txt /*netrw-q* netrw-r pi_netrw.txt /*netrw-r* @@ -6554,6 +6564,7 @@ vim-announce intro.txt /*vim-announce* vim-arguments starting.txt /*vim-arguments* vim-default-editor gui_w32.txt /*vim-default-editor* vim-dev intro.txt /*vim-dev* +vim-indent indent.txt /*vim-indent* vim-kpart gui_x11.txt /*vim-kpart* vim-mac intro.txt /*vim-mac* vim-modes intro.txt /*vim-modes* diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 7.0aa. Last change: 2004 Sep 06 +*todo.txt* For Vim version 7.0aa. Last change: 2004 Sep 13 VIM REFERENCE MANUAL by Bram Moolenaar @@ -30,34 +30,40 @@ be worked on, but only if you sponsor Vi *known-bugs* -------------------- Known bugs and current work ----------------------- +Endless loop when "syntax reset" in ~/.vim/after/syntax/syncolor.vim. +Crash when using ":set background=dark". Solved! +Limit init_highlight() to five recursive calls? + patch for Vim 6.3 for free_oldval and init_highlight()? + +Crash with long line. (Walter Briscoe, Sep 13) + +Add fix for appending BOM to 6.3? Reported by Alex Jakushev. + +Win32 console doesn't compile. Does GetCommandLineW() work for non-GUI? +(Dave Roberts) If yes, then move the functions to another file. +link with kernel32.lib? + Aborting at the ATTENTION prompt causes trouble: buffer remains active, nwindows isn't closed (fixed in buffer.c) alternate buffer gets "read error" flag. ":sbuf" and ":ball" leave an empty window behind. Change in handle_swap_exists() also in 6.3? +Add enter_cleanup() and leave_cleanup() also in 6.3? + buffer.c + ex_eval.c + proto/ex_eval.pro + structs.h + vim.h Win32: When the path to a file has Russian characters, ":cd %:p:h" doesn't work. (Valery Kondakoff) Solved in os_mswin.c. Add to 6.3? +Valencia: executable("xxd.exe") returns true while "!xxd" doesn't work. + For version 7.0: + - Include many PATCHES: - 8 Add functions: - setbufline() set line in any buffer (patch from Yegappan - Lakshmanan, 2003 Jan 21) - filter() Patch from Yegappan Lakshmanan, 2004 Jul 11 - 8 Make it possible to delete marks. Charles Campbell has a patch that - does this with the markclear() function (2004 Jan 9). - And the ":delmark" command (2004 Feb 9) - http://mysite.verizon.net/astronaut/vim/index.html#Patch - ~/tmp/ptch.delmark.bz2 - ~/tmp/ptch.markclear - Implement setmark(markname, lnum [, col [, filename]]) instead? - When "lnum" is zero delete the mark. - When "filename" has no wildcards and there is no matching buffer, add - the buffer (unlisted). - Patch for \xnn (Ciaran McCreesh) 2004 Jul 10 - http://dev.gentoo.org/~ciaranm/patches/vim/vim-7.00a-regexp-numbered-characters-r5.patch 7 Add 'taglistfiles' option, show file name and type when listing matching tags name with CTRL-D completion. Patch from Yegappan Lakshmanan. 2004 Jul 11 @@ -94,9 +100,9 @@ For version 7.0: 7 Completion of network shares, patch by Yasuhiro Matsumoto. Update 2004 Sep 6. How does this work? Missing comments. - gettext() Translate a message. (Patch from Yasuhiro Matsumoto) - Update 2004 Sep 5 - Missing docs. Search in 'runtimepath'? + gettext() Translate a message. (Patch from Yasuhiro Matsumoto) + Update 2004 Sep 10 + More docs. Search in 'runtimepath'? How to get the messages into the .po files? --- did not respond (yet) -- 7 Make "5dd" on last-but-one-line not delete anything (Vi compatible). @@ -198,6 +204,7 @@ For version 7.0: http://www.vim.org/scripts/script.php?script_id=747 http://sourceforge.net/projects/insenvim http://cedet.sourceforge.net/intellisense.shtml (for Emacs) + Ivan Villanueva has something for Java. - PERSISTENT UNDO: store undo in a file. Support multiple threads. Show the list of changes in a window to be able to select a version. @@ -262,7 +269,27 @@ Support ":set syntax=cpp.doxygen"? Sugg 2004). Should also work for 'filetype'. Patch for 'breakindent' option: repeat indent for wrapped line. (Vaclav -Smilauer, 2004 Sep 5) +Smilauer, 2004 Sep 13) + +Win32: In 'fileencodings' allow using "acp" for the active codepage. Useful +value: "ucs-bom,utf-8,acp,latin1" + +For manipulating buffers without opening a new window, support Virtual +windows. Example: + :virtwin let l = GetBufLine(4, 10) + :fun GetBufLine(bufnr, lnum) + : exe "buffer " . a:bufnr + : return getline(lnum) + :endfun +The getline() and setline() functions could work for other buffers, using a +Virtual window. +A Virtual window only exists for one command. There can be several (for +nested commands). The window works as if it comes after the last window, size +is the Vim window size, but it's never displayed. + +Win32: In the generated batch files, use $VIMRUNTIME if it's set. Examples by +Mathias Michaelis (2004 Sep 6) +Also place vimtutor.bat in %windir%? Vi incompatibility: @@ -854,6 +881,7 @@ 8 ":hardcopy": dithering to make grey text? - Add a flag in 'printoptions' to add an empty page to make the total number even. "addempty"? (Mike Williams) + - Respect 'linebreak'. Perhaps also 'showbreak'? - Should interpreted CTRL-L as a page break. - Grey line numbers are not always readable. Add field in 'printoptions'. Default to black when no syntax highlighting. @@ -1457,6 +1485,13 @@ 8 Add ":fungroup" command, to group fu Packages are loaded automatically when first used, from $VIMRUNTIME/packages (or use a search path). 7 Make globpath() also work with "**" and upwards search. (Brian Medley) +7 Add the markclear() function to delete a mark in another buffer. Charles + Campbell (2004 Jan 9) + http://mysite.verizon.net/astronaut/vim/index.html#Patch + Implement setmark(markname, lnum [, col [, filename]]) instead? + When "lnum" is zero delete the mark. + When "filename" has no wildcards and there is no matching buffer, add + the buffer (unlisted). 7 Pre-parse or compile Vim scripts into a bytecode. 1. Put the bytecode with the original script, with an ":if has('bytecode')" around it, so that it's only used with a Vim that @@ -2556,8 +2591,8 @@ 8 A pattern like "\([^a]\+\)\+" takes This one is also very slow on "/* some comment */": "^\/\*\(.*[^/]\)*$". 7 Recognize "[a-z]", "[0-9]", etc. and replace them with the faster "\l" and "\d". -7 Add a way to specify characters as hex, octal or form. Could be - \%1ax, \%200o and \%. Also \%1234u for multi-byte chars. +7 Add a way to specify characters in or form. Could be + \%. 8 Flags that apply to the whole pattern. This works for all places where a regexp is used. Add "\q" to not store this pattern as the last search pattern? @@ -2612,11 +2647,6 @@ 7 Use T-search algorithm, to speed up before saving files: "Save modified buffer "/path/file"? (Yes/Hide/No Save-all/hide-All/Quit) ". - ":s/pat/foo/3": find 3rd match of "pat", like sed. (Thomas Koehler) -- Special characters in patterns: - Inside []: - \012 octal character - \0x1a hex character - \0 \0: special character 7 When searching with 'n' give message when getting back where the search first started. Remember start of search in '/ mark. 7 Add option that scrolls screen to put cursor in middle of screen after diff --git a/runtime/doc/usr_01.txt b/runtime/doc/usr_01.txt --- a/runtime/doc/usr_01.txt +++ b/runtime/doc/usr_01.txt @@ -1,4 +1,4 @@ -*usr_01.txt* For Vim version 7.0aa. Last change: 2004 May 01 +*usr_01.txt* For Vim version 7.0aa. Last change: 2004 Sep 09 VIM USER MANUAL - by Bram Moolenaar @@ -104,11 +104,13 @@ Instead of reading the text (boring!) yo first Vim commands. This is a 30 minute tutorial that teaches the most basic Vim functionality hands-on. -On Unix and MS-Windows, if Vim has been properly installed, you can start it -from the shell: +On Unix, if Vim has been properly installed, you can start it from the shell: > vimtutor +On MS-Windows you can find it in the Program/Vim menu. Or execute +vimtutor.bat in the $VIMRUNTIME directory. + This will make a copy of the tutor file, so that you can edit it without the risk of damaging the original. There are a few translated versions of the tutor. To find out if yours is diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt --- a/runtime/doc/version7.txt +++ b/runtime/doc/version7.txt @@ -1,4 +1,4 @@ -*version7.txt* For Vim version 7.0aa. Last change: 2004 Sep 06 +*version7.txt* For Vim version 7.0aa. Last change: 2004 Sep 13 VIM REFERENCE MANUAL by Bram Moolenaar @@ -122,6 +122,8 @@ Win32: The ":winpos" command now also wo |:keepalt| Do not change the alternate file. +|:delmarks| Delete marks. + New functions: ~ @@ -135,6 +137,8 @@ getftype(fname) |getftype()| Get type o repeat(expr, count) |repeat()| Repeat "expr" "count" times. (Christophe Poucet) tr(expr, from, to) |tr()| Translate characters. (Ron Aaron) +system(cmd, input) |system()| Filters {input} through a shell + command. New autocommand events: ~ @@ -146,6 +150,20 @@ New autocommand events: ~ |ColorScheme| after loading a color scheme +New items in search patterns: ~ +|/\%d| \%d123 search for character with decimal number +|/\]| [\d123] idem, in a colletion +|/\%o| \%o103 search for character with octal number +|/\]| [\o1o3] idem, in a colletion +|/\%x| \%x1a search for character with 2 pos. hex number +|/\]| [\x1a] idem, in a colletion +|/\%u| \%u12ab search for character with 4 pos. hex number +|/\]| [\u12ab] idem, in a colletion +|/\%U| \%U1234abcd search for character with 8 pos. hex number +|/\]| [\U1234abcd] idem, in a colletion + (The above partly by Ciaran McCreesh) + + New Syntax/Indent/FTplugin files: ~ MuPAD source syntax, indent and ftplugin. (Dave Silvia) @@ -348,4 +366,11 @@ Win32: When 'encoding' is set to "utf-8" command line with non-ASCII characters are not used correctly. Recode the file names when 'encoding' is set, using the Unicode command line. +Win32 console: When the default for 'encoding' ends up to be "latin1", the +default value of 'isprint' was wrong. + +When an error message is given while waiting for a character (e.g., when an +xterm reports the number of colors), the hit-enter prompt overwrote the last +line. Don't reset msg_didout in normal_cmd() for K_IGNORE. + vim:tw=78:ts=8:ft=help:norl: diff --git a/runtime/filetype.vim b/runtime/filetype.vim --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: Bram Moolenaar -" Last Change: 2004 Aug 30 +" Last Change: 2004 Sep 11 " Listen very carefully, I will say this only once if exists("did_load_filetypes") @@ -100,6 +100,9 @@ au BufNewFile,BufRead *.a65 setf a65 au BufNewFile,BufRead *.am \ if expand("") !~? 'Makefile.am\>' | setf elf | endif +" ALSA configuration +au BufNewFile,BufRead ~/.asoundrc,/usr/share/alsa/alsa.conf,/etc/asound.conf setf alsaconf + " Arc Macro Language au BufNewFile,BufRead *.aml setf aml diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim --- a/runtime/ftplugin/vim.vim +++ b/runtime/ftplugin/vim.vim @@ -1,7 +1,7 @@ " Vim filetype plugin " Language: Vim " Maintainer: Bram Moolenaar -" Last Change: 2004 Feb 20 +" Last Change: 2004 Sep 13 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -33,10 +33,10 @@ endif setlocal commentstring=\"%s " Move around functions. -noremap [[ :call search('^\s*fu\%[nction]\>', "bW") -noremap ]] :call search('^\s*fu\%[nction]\>', "W") -noremap [] :call search('^\s*endf*\%[unction]\>', "bW") -noremap ][ :call search('^\s*endf*\%[unction]\>', "W") +noremap [[ m':call search('^\s*fu\%[nction]\>', "bW") +noremap ]] m':call search('^\s*fu\%[nction]\>', "W") +noremap [] m':call search('^\s*endf*\%[unction]\>', "bW") +noremap ][ m':call search('^\s*endf*\%[unction]\>', "W") " Move around comments noremap ]" :call search('^\(\s*".*\n\)\@ diff --git a/runtime/makemenu.vim b/runtime/makemenu.vim --- a/runtime/makemenu.vim +++ b/runtime/makemenu.vim @@ -1,6 +1,6 @@ " Script to define the syntax menu in synmenu.vim " Maintainer: Bram Moolenaar -" Last Change: 2004 Aug 30 +" Last Change: 2004 Sep 11 " This is used by "make menu" in the src directory. edit :p:h/synmenu.vim @@ -56,6 +56,7 @@ SynMenu AB.ABEL:abel SynMenu AB.AceDB\ model:acedb SynMenu AB.Ada:ada SynMenu AB.AfLex:aflex +SynMenu AB.ALSA\ config:alsaconf SynMenu AB.Altera\ AHDL:ahdl SynMenu AB.Amiga\ DOS:amiga SynMenu AB.AMPL:ampl diff --git a/runtime/plugin/NetrwFileHandlers.vim b/runtime/plugin/NetrwFileHandlers.vim --- a/runtime/plugin/NetrwFileHandlers.vim +++ b/runtime/plugin/NetrwFileHandlers.vim @@ -1,15 +1,15 @@ " NetrwFileHandlers: contains various extension-based file handlers for " netrw's browsers' x command ("eXecute launcher") " Author: Charles E. Campbell, Jr. -" Date: Aug 27, 2004 -" Version: 2 +" Date: Aug 31, 2004 +" Version: 3a NOT RELEASED " --------------------------------------------------------------------- " Prevent Reloading: {{{1 if exists("g:loaded_netrwfilehandlers") || &cp finish endif -let g:loaded_netrwfilehandlers= "v2" +let g:loaded_netrwfilehandlers= "v3a" " --------------------------------------------------------------------- " NetrwFileHandler_html: handles html when the user hits "x" when the {{{1 @@ -245,6 +245,7 @@ fun! NetrwFileHandler_ps(ps) elseif executable("gswin32") exe "silent! !gswin32 \"".a:ps.'"' redraw! + else " call Dret("NetrwFileHandler_ps 0") return 0 endif @@ -254,4 +255,59 @@ fun! NetrwFileHandler_ps(ps) endfun " --------------------------------------------------------------------- +" NetrwFileHandler_eps: handles encapsulated PostScript files {{{1 +fun! NetrwFileHandler_eps(eps) +" call Dfunc("NetrwFileHandler_ps()") + if executable("gs") + exe "silent! !gs ".a:eps + redraw! + elseif executable("ghostscript") + exe "silent! !ghostscript ".a:eps + redraw! + elseif executable("ghostscript") + exe "silent! !ghostscript ".a:eps + redraw! + elseif executable("gswin32") + exe "silent! !gswin32 \"".a:eps.'"' + redraw! + else +" call Dret("NetrwFileHandler_ps 0") + return 0 + endif +endfun + +" --------------------------------------------------------------------- +" NetrwFileHandler_fig: handles xfig files {{{1 +fun! NetrwFileHandler_fig(fig) +" call Dfunc("NetrwFileHandler_fig()") + if executable("xfig") + exe "silent! !xfig ".a:fig + redraw! + else +" call Dret("NetrwFileHandler_fig 0") + return 0 + endif + +" call Dret("NetrwFileHandler_fig 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" NetrwFileHandler_obj: handles tgif's obj files {{{1 +fun! NetrwFileHandler_obj(obj) +" call Dfunc("NetrwFileHandler_obj()") + if has("unix") && executable("tgif") + exe "silent! !tgif ".a:obj + redraw! + else +" call Dret("NetrwFileHandler_obj 0") + return 0 + endif + +" call Dret("NetrwFileHandler_obj 1") + return 1 +endfun + + +" --------------------------------------------------------------------- " vim: ts=4 fdm=marker diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim --- a/runtime/plugin/netrw.vim +++ b/runtime/plugin/netrw.vim @@ -1,20 +1,20 @@ " netrw.vim: Handles file transfer and remote directory listing across a network -" Last Change: Aug 27, 2004 +" Last Change: Sep 10, 2004 " Maintainer: Charles E. Campbell, Jr. PhD -" Version: 47 +" Version: 48 " License: Vim License (see vim's :help license) " -" But be doers of the word, and not only hearers, deluding your own selves +" But be doers of the Word, and not only hearers, deluding your own selves " (James 1:22 RSV) " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim " --------------------------------------------------------------------- " Prevent Reloading: {{{1 -if exists("loaded_netrw") || &cp +if exists("g:loaded_netrw") || &cp finish endif -let loaded_netrw = "v47" +let g:loaded_netrw = "v48" let s:save_cpo = &cpo let loaded_explorer = 1 set cpo&vim @@ -43,6 +43,13 @@ if !exists("g:netrw_list_cmd") let g:netrw_list_cmd= "" endif endif +if !exists("g:netrw_ftp_list_cmd") + if has("unix") || exists("g:netrw_cygwin") + let g:netrw_ftp_list_cmd= "ls -lF" + else + let g:netrw_ftp_list_cmd= "dir" + endif +endif if !exists("g:netrw_rm_cmd") let g:netrw_rm_cmd = "ssh HOSTNAME rm" endif @@ -111,22 +118,28 @@ if !exists("g:netrw_ftp_browse_reject") let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not' endif if !exists("g:netrw_keepdir") - let g:netrw_keepdir= 0 + let g:netrw_keepdir= 1 endif if !exists("s:netrw_cd_escape") if has("win32") || has("win95") || has("win64") || has("win16") let s:netrw_cd_escape="#% " else - let s:netrw_cd_escape="*$%'\" ?`" + let s:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\" endif endif if !exists("s:netrw_glob_escape") if has("win32") || has("win95") || has("win64") || has("win16") let s:netrw_glob_escape= "" else - let s:netrw_glob_escape= '[]*?`{~' + let s:netrw_glob_escape= '[]*?`{~$' endif endif +if !exists("g:netrw_alto") + let g:netrw_alto= 0 +endif +if !exists("g:netrw_altv") + let g:netrw_altv= 0 +endif " BufEnter event ignored by decho when following variable is true " Has a side effect that doau BufReadPost doesn't work, so @@ -286,18 +299,18 @@ fun! s:NetRead(...) if match(choice,"?") == 0 " give help - echo 'NetRead Usage:' - echo ':Nread machine:path uses rcp' - echo ':Nread "machine path" uses ftp with <.netrc>' - echo ':Nread "machine id password path" uses ftp' - echo ':Nread dav://machine[:port]/path uses cadaver' - echo ':Nread fetch://machine/path uses fetch' - echo ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' - echo ':Nread http://[user@]machine/path uses http wget' - echo ':Nread rcp://[user@]machine/path uses rcp' - echo ':Nread rsync://machine[:port]/path uses rsync' - echo ':Nread scp://[user@]machine[[:#]port]/path uses scp' - echo ':Nread sftp://[user@]machine[[:#]port]/path uses sftp' + echomsg 'NetRead Usage:' + echomsg ':Nread machine:path uses rcp' + echomsg ':Nread "machine path" uses ftp with <.netrc>' + echomsg ':Nread "machine id password path" uses ftp' + echomsg ':Nread dav://machine[:port]/path uses cadaver' + echomsg ':Nread fetch://machine/path uses fetch' + echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' + echomsg ':Nread http://[user@]machine/path uses http wget' + echomsg ':Nread rcp://[user@]machine/path uses rcp' + echomsg ':Nread rsync://machine[:port]/path uses rsync' + echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp' + echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp' break elseif match(choice,"^\"") != -1 @@ -315,7 +328,9 @@ fun! s:NetRead(...) let wholechoice = wholechoice . " " . choice let ichoice = ichoice + 1 if ichoice > a:0 - echoerr "Unbalanced string in filename '". wholechoice ."'" + if !exists("g:netrw_quiet") + echoerr "Unbalanced string in filename '". wholechoice ."'" + endif " call Dret("NetRead") return endif @@ -397,11 +412,10 @@ fun! s:NetRead(...) exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine endif " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) - if getline(1) !~ "^$" + if getline(1) !~ "^$" && !exists("g:netrw_quiet") let debugkeep= &debug set debug=msg echoerr getline(1) - exe "echomsg '".getline(1)."'" let &debug= debugkeep endif bd! @@ -445,7 +459,9 @@ fun! s:NetRead(...) " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) if getline(1) !~ "^$" " call Decho("error<".getline(1).">") - echoerr getline(1) + if !exists("g:netrw_quiet") + echoerr getline(1) + endif endif bd! let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method) @@ -475,7 +491,9 @@ fun! s:NetRead(...) elseif b:netrw_method == 5 " read with http (wget) " call Decho("read via http (method #5)") if g:netrw_http_cmd == "" - echoerr "neither wget nor fetch command is available" + if !exists("g:netrw_quiet") + echoerr "neither wget nor fetch command is available" + endif exit endif @@ -550,7 +568,9 @@ fun! s:NetRead(...) " fetch://[user@]host[:http]/path elseif b:netrw_method == 8 " read with fetch if g:netrw_fetch_cmd == "" - echoerr "fetch command not available" + if !exists("g:netrw_quiet") + echoerr "fetch command not available" + endif exit endif if exists("g:netrw_option") && g:netrw_option == ":http" @@ -749,17 +769,17 @@ fun! s:NetWrite(...) range " Reconstruct Choice if choice starts with '"' if match(choice,"?") == 0 - echo 'NetWrite Usage:"' - echo ':Nwrite machine:path uses rcp' - echo ':Nwrite "machine path" uses ftp with <.netrc>' - echo ':Nwrite "machine id password path" uses ftp' - echo ':Nwrite dav://[user@]machine/path uses cadaver' - echo ':Nwrite fetch://[user@]machine/path uses fetch' - echo ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)' - echo ':Nwrite rcp://machine/path uses rcp' - echo ':Nwrite rsync://[user@]machine/path uses rsync' - echo ':Nwrite scp://[user@]machine[[:#]port]/path uses scp' - echo ':Nwrite sftp://[user@]machine/path uses sftp' + echomsg 'NetWrite Usage:"' + echomsg ':Nwrite machine:path uses rcp' + echomsg ':Nwrite "machine path" uses ftp with <.netrc>' + echomsg ':Nwrite "machine id password path" uses ftp' + echomsg ':Nwrite dav://[user@]machine/path uses cadaver' + echomsg ':Nwrite fetch://[user@]machine/path uses fetch' + echomsg ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)' + echomsg ':Nwrite rcp://machine/path uses rcp' + echomsg ':Nwrite rsync://[user@]machine/path uses rsync' + echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp' + echomsg ':Nwrite sftp://[user@]machine/path uses sftp' break elseif match(choice,"^\"") != -1 @@ -775,7 +795,9 @@ fun! s:NetWrite(...) range let wholechoice= wholechoice . " " . choice let ichoice = ichoice + 1 if choice > a:0 - echoerr "Unbalanced string in filename '". wholechoice ."'" + if !exists("g:netrw_quiet") + echoerr "Unbalanced string in filename '". wholechoice ."'" + endif " call Dret("NetWrite") return endif @@ -843,7 +865,9 @@ fun! s:NetWrite(...) range endif " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) if getline(1) !~ "^$" - echoerr getline(1) + if !exists("g:netrw_quiet") + echoerr getline(1) + endif let mod=1 endif bd! @@ -880,7 +904,9 @@ fun! s:NetWrite(...) range exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n" " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) if getline(1) !~ "^$" - echoerr getline(1) + if !exists("g:netrw_quiet") + echoerr getline(1) + endif let mod=1 endif bd! @@ -906,7 +932,9 @@ fun! s:NetWrite(...) range "......................................... " http: NetWrite Method #5 elseif b:netrw_method == 5 - echoerr "***warning*** currently does not support writing using http:" + if !exists("g:netrw_quiet") + echoerr "***warning*** currently does not support writing using http:" + endif "......................................... " dav: NetWrite Method #6 @@ -997,12 +1025,18 @@ fun! NetBrowse(dirname) " call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist) " sanity check - if exists("b:netrw_method") && (b:netrw_method =~ '[23]' && !executable("ftp")) - echoerr "***netrw*** this system doesn't support remote directory listing via ftp" -" call Dret("NetBrowse") - return + if exists("b:netrw_method") && b:netrw_method =~ '[23]' + if !executable("ftp") + if !exists("g:netrw_quiet") + echoerr "***netrw*** this system doesn't support remote directory listing via ftp" + endif +" call Dret("NetBrowse") + return + endif elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == '' - echoerr "***netrw*** this system doesn't support remote directory listing via ssh" + if !exists("g:netrw_quiet") + echoerr "***netrw*** this system doesn't support remote directory listing via ssh" + endif " call Dret("NetBrowse") return endif @@ -1014,7 +1048,9 @@ fun! NetBrowse(dirname) let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$' " call Decho("dirpat<".dirpat.">") if a:dirname !~ dirpat - echoerr "NetBrowse: I don't understand your dirname<".a:dirname.">" + if !exists("g:netrw_quiet") + echoerr "NetBrowse: I don't understand your dirname<".a:dirname.">" + endif " call Dret("NetBrowse : badly formatted dirname<".a:dirname.">") return endif @@ -1031,7 +1067,7 @@ fun! NetBrowse(dirname) " call Decho("set up fname <".fname .">") if method == "ftp" - let listcmd = "-lF" + let listcmd = g:netrw_ftp_list_cmd else let listcmd = substitute(g:netrw_list_cmd,'\',user.machine,'') endif @@ -1041,14 +1077,18 @@ fun! NetBrowse(dirname) endif " optionally sort by time (-t) or by size (-S) - if g:netrw_sort_by =~ "^t" - let listcmd= listcmd."t" - elseif g:netrw_sort_by =~ "^s" - let listcmd= listcmd."S" - endif - " optionally sort in reverse - if g:netrw_sort_direction =~ "^r" - let listcmd= listcmd."r" + if listcmd == "dir" && g:netrw_sort_by =~ "^[ts]" + echoerr "***warning*** windows' ftp doesn't support time/size sorts (get cygwin, set g:netrw_cygwin)" + else + if g:netrw_sort_by =~ "^t" + let listcmd= listcmd."t" + elseif g:netrw_sort_by =~ "^s" + let listcmd= listcmd."S" + endif + " optionally sort in reverse + if g:netrw_sort_direction =~ "^r" && listcmd == "dir" + let listcmd= listcmd."r" + endif endif " call Decho("set up listcmd<".listcmd.">") @@ -1071,6 +1111,7 @@ fun! NetBrowse(dirname) " remote-read the requested file into current buffer enew! +" call Decho("exe file .method."://".user.machine."/".escape(path,s:netrw_cd_escape)) exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape) exe "silent doau BufReadPre ".fname silent call s:NetRead(method."://".user.machine."/".path) @@ -1087,9 +1128,9 @@ fun! NetBrowse(dirname) " call Decho("Perform directory listing...") " set up new buffer and map let bufname = method.'://'.user.machine.'/'.path - let bufnamenr = bufexists(bufname) + let bufnamenr = bufnr(bufname.'$') " call Decho("bufname<".bufname."> bufnamenr=".bufnamenr) - if bufnamenr != 0 + if bufnamenr != -1 " buffer already exists, switch to it! " call Decho("buffer already exists, switching to it") exe "b ".bufnamenr @@ -1104,6 +1145,7 @@ fun! NetBrowse(dirname) " rename file to reflect where its from setlocal ts=32 bt=nofile bh=wipe nobl +" call Decho("exe file ".escape(bufname,s:netrw_cd_escape)) exe 'file '.escape(bufname,s:netrw_cd_escape) " call Decho("renaming file to bufname<".bufname.">") setlocal bt=nowrite bh=hide nobl @@ -1113,17 +1155,17 @@ fun! NetBrowse(dirname) nnoremap :exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) nnoremap :exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'./')) nnoremap - :exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'../')) - nnoremap a :let g:netrw_hide=!g:netrw_hideexe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'./')) + nnoremap a :let g:netrw_hide=(g:netrw_hide+1)%3exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'./')) nnoremap b :call NetBookmarkDir(0,expand("%")) nnoremap B :call NetBookmarkDir(1,expand("%")) nnoremap :call NetHideEdit(0) nnoremap i :call NetLongList(0) - nnoremap o :exe g:netrw_winsize."wincmd s"exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) + nnoremap o :exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) nnoremap q :call NetBookmarkDir(2,expand("%")) nnoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'./')) nnoremap s :call NetSaveWordPosn()let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'./'))call NetRestoreWordPosn() nnoremap S :call NetSortSequence(0) - nnoremap v :exe g:netrw_winsize."wincmd v"exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) + nnoremap v :exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) nnoremap x :exe "norm! 0"call NetBrowseX(NetBrowseChgDir(expand("%"),NetGetWord()),1) nnoremap <2-leftmouse> :exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) exe 'nnoremap :exe "norm! 0"call NetBrowseRm("'.user.machine.'","'.path.'")' @@ -1157,7 +1199,11 @@ fun! NetBrowse(dirname) keepjumps put ='\" Sorted by '.sortby endif if g:netrw_list_hide != "" && g:netrw_hide - keepjumps put ='\" Hiding: '.g:netrw_list_hide + if g:netrw_hide == 1 + keepjumps put ='\" Hiding: '.g:netrw_list_hide + else + keepjumps put ='\" Showing: '.g:netrw_list_hide + endif let s:netrw_bannercnt= s:netrw_bannercnt + 1 endif keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec' @@ -1167,26 +1213,42 @@ fun! NetBrowse(dirname) " Use ftp if that was the file-transfer method selected, otherwise use ssh " Note that not all ftp servers honor the options for ls if method == "ftp" - call NetBrowseFtpCmd(path,"ls ".listcmd) + " use ftp to get remote file listing +" call Decho("use ftp to get remote file listing") + call NetBrowseFtpCmd(path,listcmd) + keepjumps 1d if !g:netrw_longlist + " shorten the listing " call Decho("generate short listing") - " shorten the listing exe "keepjumps ".s:netrw_bannercnt " cleanup while getline(".") =~ g:netrw_ftp_browse_reject keepjumps d endwhile - keepjumps put='../' - keepjumps put='./' + + " if there's no ../ listed, then put ./ and ../ in + let line1= line(".") + keepjumps 1 + silent keepjumps call search('^\.\.\/\%(\s\|$\)','W') + let line2= line(".") + if line2 == 0 + keepjumps put='../' + keepjumps put='./' + endif + exe "keepjumps ".line1 + keepjumps norm! 0 + + " more cleanup exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e' exe "keepjumps silent ".s:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#' exe "keepjumps silent ".s:netrw_bannercnt.',$g/ -> /s# -> .*$#/#' endif else -" call Decho("use ssh") + " use ssh to get remote file listing +" call Decho("use ssh to get remote file listing") let shq= &shq? &shq : ( &sxq? &sxq : "'") " call Decho("exe silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq) exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq @@ -1210,8 +1272,17 @@ fun! NetBrowse(dirname) while getline(".") =~ '^total\s\+\d\+$' || getline(".") =~ 'Trying\s\+\d\+.*$' keepjumps d endwhile - exe 'keepjumps '.s:netrw_bannercnt."put='./'" - exe 'keepjumps '.s:netrw_bannercnt."put='../'" + " if there's no ../ listed, then put ./ and ../ in + let line1= line(".") + keepjumps 1 + silent keepjumps call search('^\.\.\/\%(\s\|$\)','W') + let line2= line(".") + if line2 == 0 + exe 'keepjumps '.s:netrw_bannercnt."put='./'" + exe 'keepjumps '.s:netrw_bannercnt."put='../'" + endif + exe "keepjumps ".line1 + keepjumps norm! 0 endif exe 'keepjumps silent '.s:netrw_bannercnt.',$s/ -> .*$//e' @@ -1229,6 +1300,7 @@ fun! NetBrowse(dirname) exe "keepjumps silent ".s:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e' endif endif + exe "keepjumps ".s:netrw_bannercnt setlocal nomod setlocal noma @@ -1266,6 +1338,7 @@ fun! NetBrowseChgDir(dirname,newdir else " strip off a directory name from dirname let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','') + exe "silent! keepjumps ".curline.",$d" endif " call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">") @@ -1283,9 +1356,13 @@ endfun " NetGetWord: it gets the directory named under the cursor fun! NetGetWord() " call Dfunc("NetGetWord() line#".line(".")) - let dirname= getline(".") - if dirname =~ '\t' - let dirname= substitute(dirname,'\t.*$','','e') + if line(".") < s:netrw_bannercnt + let dirname= "./" + else + let dirname= getline(".") + if dirname =~ '\t' + let dirname= substitute(dirname,'\t.*$','','e') + endif endif " call Dret("NetGetWord <".dirname.">") return dirname @@ -1299,6 +1376,7 @@ fun! NetBrowseRm(usrhost,path) rang " preparation for removing multiple files/directories let ctr= a:firstline + let all= 0 " remove multiple files and directories while ctr <= a:lastline @@ -1310,11 +1388,19 @@ fun! NetBrowseRm(usrhost,path) rang if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$') " attempt to remove file - call inputsave() - let ok= input("Confirm deletion of file<".rmfile."> ","y") - call inputrestore() + if !all + echohl Statement + call inputsave() + let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + echohl NONE + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif - if ok == "y" + if all || ok =~ 'y\%[es]' || ok == "" if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3) silent! keepjumps .,$d call NetBrowseFtpCmd(a:path,"delete ".rmfile) @@ -1324,15 +1410,23 @@ fun! NetBrowseRm(usrhost,path) rang let ret= system(netrw_rm_cmd) " call Decho("returned=".ret." errcode=".v:shell_error) endif + elseif ok =~ 'q\%[uit]' + break endif else " attempt to remove directory - call inputsave() - let ok= input("Confirm deletion of directory<".rmfile."> ","y") - call inputrestore() + if !all + call inputsave() + let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif - if ok == "y" + if all || ok =~ 'y\%[es]' || ok == "" if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3) call NetBrowseFtpCmd(a:path,"rmdir ".rmfile) else @@ -1348,11 +1442,14 @@ fun! NetBrowseRm(usrhost,path) rang let ret= system(netrw_rmf_cmd) " call Decho("returned=".ret." errcode=".v:shell_error) - if v:shell_error != 0 + if v:shell_error != 0 && !exists("g:netrw_quiet") echoerr "unable to remove directory<".rmfile."> -- is it empty?" endif endif endif + + elseif ok =~ 'q\%[uit]' + break endif endif @@ -1414,43 +1511,72 @@ endfun fun! NetBrowseX(fname,remote) " call Dfunc("NetBrowseX(".a:fname." remote=".a:remote.")") + " set up the filename + " (lower case the extension, make a local copy of a remote file) let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e') if has("win32") || has("win95") || has("win64") || has("win16") let exten= substitute(exten,'^.*$','\L&\E','') endif + let fname= escape(a:fname,"%#") +" call Decho("fname<".fname."> after escape()") + + if a:remote == 1 + " create a local copy + let fname= tempname().".".exten +" call Decho("create a local copy of <".a:fname."> as <".fname.">") + exe "keepjumps silent bot 1new ".a:fname + let eikeep= &ei + set ei=all bh=delete + exe "w! ".fname + let &ei= eikeep + q + endif " call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten)) - if exten != "" && exists("*NetrwFileHandler_".exten) - let fname= a:fname - if a:remote == 1 - " create a local copy - let fname= tempname().".".exten -" call Decho("create a local copy of <".a:fname."> as <".fname.">") - exe "keepjumps silent bot 1new ".a:fname - let eikeep= &ei - set ei=all bh=delete - exe "w! ".fname - let &ei= eikeep - q - endif + " set up redirection + if &srr =~ "%s" + let redir= substitute(&srr,"%s","/dev/null"."") + else + let redir= &srr . "/dev/null" + endif +" call Decho("redir:".redir.":") + " execute the file handler + if has("win32") || has("win64") +" call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"') + exe 'silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"' + let ret= v:shell_error + + elseif has("unix") && executable("kfmclient") +" call Decho("exe silent !kfmclient exec '".escape(fname,'%#')."' ".redir) + exe "silent !kfmclient exec '".escape(fname,'%#')."' ".redir + let ret= v:shell_error + + elseif has("unix") && executable("gnome-open") +" call Decho("exe silent !gnome-open '".escape(fname,'%#')."' ".redir) + exe "silent !gnome-open '".escape(fname,'%#')."'".redir + let ret= v:shell_error + + elseif exten != "" && exists("*NetrwFileHandler_".exten) +" call Decho("let ret= NetrwFileHandler_".exten.'("'.fname.'")') exe "let ret= NetrwFileHandler_".exten.'("'.fname.'")' - redraw! + endif + redraw! - " cleanup: remove temporary file, - " delete current buffer if success with handler, - " return to prior buffer (directory listing) - if a:remote == 1 && fname != a:fname -" call Decho("deleting temporary file<".fname.">") - call delete(fname) - endif - if ret != 0 - let eikeep= &ei - set ei=all bh=delete bt=nofile - exe "norm! \" - let &ei= eikeep - redraw! - endif + " cleanup: remove temporary file, + " delete current buffer if success with handler, + " return to prior buffer (directory listing) + if a:remote == 1 && fname != a:fname +" call Decho("deleting temporary file<".fname.">") + call delete(fname) + endif + + if a:remote == 1 + let eikeep= &ei + set ei=all bh=delete bt=nofile + exe "norm! \" + let &ei= eikeep + redraw! endif " call Dret("NetBrowseX") @@ -1482,6 +1608,8 @@ fun! NetBrowseFtpCmd(path,cmd) endif exe "put ='".a:cmd."'" + +" redraw!|call inputsave()|call input("Pausing...")|call inputrestore() "Decho if exists("g:netrw_port") && g:netrw_port != "" " call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port @@ -1524,6 +1652,19 @@ fun! NetBrowseFtpCmd(path,cmd) echo "***warning*** unable to comply with your request<" . choice . ">" endif + " cleanup for Windows + if has("win32") || has("win95") || has("win64") || has("win16") + keepjumps silent! %s/\r$// + endif + if a:cmd == "dir" + " infer directory/link based on the file permission string + keepjumps silent g/d\%([-r][-w][-x]\)\{3}/s@$@/@ + keepjumps silent g/l\%([-r][-w][-x]\)\{3}/s/$/@/ + if !g:netrw_longlist + exe "keepjumps silent ".curline.',$s/^\%(\S\+\s\+\)\{8}//' + endif + endif + " restore settings let &ff= ffkeep " call Dret("NetBrowseFtpCmd") @@ -1544,8 +1685,14 @@ fun! NetrwListHide() let hide = listhide let listhide= "" endif + + " Prune the list by hiding any files which match " call Decho("pruning <".hide."> listhide<".listhide.">") - exe 'keepjumps silent '.s:netrw_bannercnt.',$g~'.hide.'~d' + if g:netrw_hide == 1 + exe 'keepjumps silent '.s:netrw_bannercnt.',$g~'.hide.'~d' + elseif g:netrw_hide == 2 + exe 'keepjumps silent '.s:netrw_bannercnt.',$v~'.hide.'~d' + endif endwhile " call Dret("NetrwListHide") @@ -1662,12 +1809,16 @@ fun! NetMakeDir(usrhost) let fullnewdir= b:netrw_curdir.'/'.newdirname " call Decho("fullnewdir<".fullnewdir.">") if isdirectory(fullnewdir) - echoerr "***warning*** <".newdirname."> is already a directory!" + if !exists("g:netrw_quiet") + echoerr "***warning*** <".newdirname."> is already a directory!" + endif " call Dret("NetMakeDir : directory<".newdirname."> exists previously") return endif if filereadable(fullnewdir) - echoerr "***warning*** <".newdirname."> is already a file!" + if !exists("g:netrw_quiet") + echoerr "***warning*** <".newdirname."> is already a file!" + endif " call Dret("NetMakeDir : file<".newdirname."> exists previously") return endif @@ -1687,7 +1838,7 @@ fun! NetMakeDir(usrhost) call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,'./')) exe "norm! ".hline."G0z\" exe linenum - else + elseif !exists("g:netrw_quiet") echoerr "***warning*** unable to make directory<".newdirname.">" endif redraw! @@ -1706,7 +1857,7 @@ fun! NetMakeDir(usrhost) call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./')) exe "norm! ".hline."G0z\" exe linenum - else + elseif !exists("g:netrw_quiet") echoerr "***warning*** unable to make directory<".newdirname.">" endif redraw! @@ -1775,7 +1926,9 @@ fun! LocalBrowse(dirname) " call Dredir("ls!") if v:version < 603 - echoerr "vim version<".v:version."> too old for browsing with netrw" + if !exists("g:netrw_quiet") + echoerr "vim version<".v:version."> too old for browsing with netrw" + endif " call Dret("LocalBrowse : vim version<".v:version."> too old") return endif @@ -1796,14 +1949,13 @@ fun! LocalBrowse(dirname) " remove the trailing "/" let dirnamens= substitute(dirname,'/$','','e') let dirnamenr= bufnr(dirnamens.'$') -" call Decho("dirnamenr= bufnr(".dirnamens.")=".dirnamenr) +" call Decho("dirnamenr= bufnr(".dirnamens.")=".dirnamenr." bufname(".dirnamenr.")=".bufname(dirnamenr)) if dirnamenr != 0 && bufname(dirnamenr) != dirnamens " try keeping the trailing slash let dirnamenr = bufnr(dirname.'$') -" call Decho("retry: dirnamenr= bufnr(".dirname.")=".dirnamenr) +" call Decho("dirnamenr= bufnr(".dirname.")=".dirnamenr." bufname(".dirnamenr.")=".bufname(dirnamenr)." (retry with /)") endif -" call Decho("bufnr(dirname<".dirname.">)=".dirnamenr) if dirnamenr != -1 " buffer already exists (hidden), so switch to it! @@ -1812,12 +1964,14 @@ fun! LocalBrowse(dirname) exe "b ".dirnamenr exe 'silent! cd '.escape(substitute(a:dirname,'\\','/','ge'),s:netrw_cd_escape) " call Decho("changed directory to<".dirname.">") - if a:dirname != "." && line("$") >= 5 -" call Dret("LocalBrowse : buffer already exists with info, #".dirnamenr) - if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif - return + if a:dirname != "." && line("$") >= 5 && exists("b:netrw_curdir") + if b:netrw_curdir == dirname +" call Dret("LocalBrowse : buffer already exists with info, #".dirnamenr) + if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif + return + endif endif -" call Decho("buffer already exists, but needs listing (buf#".dirnamenr.")") +" call Decho("buffer already exists, but needs re-listing (buf#".dirnamenr.")") setlocal ma keepjumps %d if expand("%:p") != dirname @@ -1839,19 +1993,20 @@ fun! LocalBrowse(dirname) nnoremap :exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,NetGetWord())) nnoremap :exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,'./')) nnoremap - :exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,'../')) - nnoremap a :let g:netrw_hide=!g:netrw_hideexe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,'./')) + nnoremap a :let g:netrw_hide=(g:netrw_hide+1)%3exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,'./')) nnoremap b :call NetBookmarkDir(0,b:netrw_curdir) nnoremap B :call NetBookmarkDir(1,b:netrw_curdir) nnoremap c :exe "cd ".b:netrw_curdir nnoremap d :call NetMakeDir("") nnoremap :call NetHideEdit(1) nnoremap i :call NetLongList(1) - nnoremap o :exe g:netrw_winsize."wincmd s"exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,NetGetWord())) + nnoremap o :exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,NetGetWord())) + nnoremap p :exe "norm! 0"call LocalPreview(LocalBrowseChgDir(b:netrw_curdir,NetGetWord(),1)) nnoremap q :call NetBookmarkDir(2,b:netrw_curdir) nnoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,'./')) nnoremap s :call NetSaveWordPosn()let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,'./'))call NetRestoreWordPosn() nnoremap S :call NetSortSequence(1) - nnoremap v :exe g:netrw_winsize."wincmd v"exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,NetGetWord())) + nnoremap v :exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,NetGetWord())) nnoremap x :exe "norm! 0"call NetBrowseX(LocalBrowseChgDir(b:netrw_curdir,NetGetWord(),0),0) nnoremap <2-leftmouse> :exe "norm! 0"call LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,NetGetWord())) exe 'nnoremap :exe "norm! 0"call LocalBrowseRm("'.b:netrw_curdir.'")' @@ -1888,7 +2043,11 @@ fun! LocalBrowse(dirname) keepjumps put ='\" Sorted by '.sortby endif if g:netrw_list_hide != "" && g:netrw_hide - keepjumps put ='\" Hiding: '.g:netrw_list_hide + if g:netrw_hide == 1 + keepjumps put ='\" Hiding: '.g:netrw_list_hide + else + keepjumps put ='\" Showing: '.g:netrw_list_hide + endif let s:netrw_bannercnt= s:netrw_bannercnt + 1 endif keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec' @@ -1925,13 +2084,35 @@ endfun fun! LocalBrowseList(dirname) " call Dfunc("LocalBrowseList(dirname<".a:dirname.">)") + " get the list of files contained in the current directory let dirname = escape(a:dirname,s:netrw_glob_escape) let dirnamelen = strlen(a:dirname) let filelist = glob(dirname."*") +" call Decho("glob(dirname<".dirname.">,*)=".filelist) if filelist != "" let filelist= filelist."\n" endif let filelist= filelist.glob(dirname.".*") +" call Decho("glob(dirname<".dirname.">,.*)=".glob(dirname.".*")) + + " if the directory name includes a "$", and possibly other characters, + " the glob() doesn't include "." and ".." entries. + if filelist !~ '[\\/]\.[\\/]\=\(\n\|$\)' +" call Decho("forcibly tacking on .") + if filelist == "" + let filelist= dirname."." + else + let filelist= filelist."\n".a:dirname."." + endif +" call Decho("filelist<".filelist.">") + endif + if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)' +" call Decho("forcibly tacking on ..") + let filelist= filelist."\n".a:dirname.".." +" call Decho("filelist<".filelist.">") + endif + let filelist= substitute(filelist,'\n\{2,}','\n','ge') + " call Decho("dirname<".dirname.">") " call Decho("dirnamelen<".dirnamelen.">") " call Decho("filelist<".filelist.">") @@ -1948,6 +2129,9 @@ fun! LocalBrowseList(dirname) if isdirectory(file) let pfile= file."/" endif + if pfile =~ '//$' + let pfile= substitute(pfile,'//$','/','e') + endif let pfile= strpart(pfile,dirnamelen) if g:netrw_longlist let sz = getfsize(file) @@ -2040,6 +2224,7 @@ fun! LocalBrowseRm(path) range let ret = 0 let netrw_origdir = s:NetGetcwd(1) exe 'cd '.b:netrw_curdir + let all= 0 " remove multiple files and directories while ctr <= a:lastline @@ -2062,22 +2247,40 @@ fun! LocalBrowseRm(path) range if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$') " attempt to remove file - call inputsave() - let ok= input("Confirm deletion of file<".rmfile."> ","y") - call inputrestore() - if ok == "y" + if !all + echohl Statement + call inputsave() + let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + echohl NONE + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif + + if all || ok =~ 'y\%[es]' || ok == "" let ret= delete(rmfile) " call Decho("errcode=".v:shell_error." ret=".ret) + elseif ok =~ 'q\%[uit]' + break endif else " attempt to remove directory - call inputsave() - let ok= input("Confirm deletion of directory<".rmfile."> ","y") - call inputrestore() + if !all + echohl Statement + call inputsave() + let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif let rmfile= substitute(rmfile,'/$','','e') - if ok == "y" + if all || ok =~ 'y\%[es]' || ok == "" " call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")') call system(g:netrw_local_rmdir.' "'.rmfile.'"') " call Decho("v:shell_error=".v:shell_error) @@ -2091,14 +2294,17 @@ fun! LocalBrowseRm(path) range if has("unix") " call Decho("3rd attempt to remove directory<".rmfile.">") call system("rm ".rmfile) - if v:shell_error != 0 + if v:shell_error != 0 && !exists("g:netrw_quiet") echoerr "unable to remove directory<".rmfile."> -- is it empty?" endif - else + elseif !exist("g:netrw_quiet")s echoerr "unable to remove directory<".rmfile."> -- is it empty?" endif endif endif + + elseif ok =~ 'q\%[uit]' + break endif endif @@ -2161,7 +2367,23 @@ fun! LocalBrowseRename(path) range endfun " --------------------------------------------------------------------- -" NetGetcwd: get the current directory. +" LocalPreview: {{{2 +fun! LocalPreview(path) range +" call Dfunc("LocalPreview(path<".a:path.">)") + if has("quickfix") + if !isdirectory(a:path) + exe "pedit ".a:path + elseif !exist("g:netrw_quiet")s + echoerr "sorry, cannot preview a directory such as <".a:path.">" + endif + elseif !exist("g:netrw_quiet")s + echoerr "sorry, to preview your vim needs the quickfix feature compiled in" + endif +" call Dret("LocalPreview") +endfun + +" --------------------------------------------------------------------- +" NetGetcwd: get the current directory. {{{2 " Change backslashes to forward slashes, if any. " If doesc is true, escape certain troublesome characters fun! NetGetcwd(doesc) @@ -2354,7 +2576,9 @@ fun! s:NetMethod(choice) " globals: met endif else - echoerr "***error*** cannot determine method" + if !exists("g:netrw_quiet") + echoerr "***error*** cannot determine method" + endif let b:netrw_method = -1 endif diff --git a/runtime/syntax/alsaconf.vim b/runtime/syntax/alsaconf.vim new file mode 100644 --- /dev/null +++ b/runtime/syntax/alsaconf.vim @@ -0,0 +1,72 @@ +" Vim syntax file +" Language: ALSA configuration file +" Maintainer: Nikolai Weibull +" URL: http://www.pcppopper.org/ +" Latest Revision: 2004-09-10 +" arch-tag: 3e06fe53-28d5-44a1-871d-279f22e7aed4 + +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" todo +syn keyword alsoconfTodo contained FIXME TODO XXX NOTE + +" comments +syn region alsaconfComment matchgroup=alsaconfComment start="#" end="$" + \ contains=alsaconfTodo + +" special characters +syn match alsaconfSpecialChar contained "\\[ntvbrf]" +syn match alsaconfSpecialChar contained "\\\o\+" + +" strings +syn region alsaconfString matchgroup=alsaconfString start=+"+ skip=+\\$+ + \ end=+"+ end=+$+ contains=alsaconfSpecialChar + +" preprocessor special +syn match alsaconfSpecial contained "confdir:" + +" preprocessor +syn region alsaconfPreProc matchgroup=alsaconfPreProc start="<" end=">" + \ contains=alsaconfSpecial + +" modes +syn match alsaconfMode "[+?!-]" + +" keywords +syn keyword alsaconfKeyword card default device errors files func strings +syn keyword alsaconfKeyword subdevice type vars + +" variables +syn match alsaconfVariables "@\(hooks\|func\|args\)" + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_alsaconf_syn_inits") + if version < 508 + let did_dircolors_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink alsoconfTodo Todo + HiLink alsaconfComment Comment + HiLink alsaconfSpecialChar SpecialChar + HiLink alsaconfString String + HiLink alsaconfSpecial Special + HiLink alsaconfPreProc PreProc + HiLink alsaconfMode Special + HiLink alsaconfKeyword Keyword + HiLink alsaconfVariables Identifier + + delcommand HiLink +endif + +let b:current_syntax = "alsaconf" + +" vim: set sts=2 sw=2: diff --git a/runtime/syntax/netrwlist.vim b/runtime/syntax/netrwlist.vim --- a/runtime/syntax/netrwlist.vim +++ b/runtime/syntax/netrwlist.vim @@ -1,7 +1,7 @@ " Language : Netrw Remote-Directory Listing Syntax " Maintainer : Charles E. Campbell, Jr. -" Last change: Aug 20, 2004 -" Version : 4 +" Last change: Sep 08, 2004 +" Version : 5 " --------------------------------------------------------------------- " Syntax Clearing: {{{1 @@ -18,7 +18,7 @@ syn match netrwDir "^.*/\%(\t\|$\)" syn match netrwClassify "[*=|@/]\%(\t\|$\)" syn match netrwSymLink "^.*@\%(\t\|$\)" contains=netrwClassify syn match netrwComment '".*\%(\t\|$\)' contains=@NetrwGroup -syn match netrwHide '^"\s*Hiding:' skipwhite nextgroup=netrwHidePat +syn match netrwHide '^"\s*\(Hid\|Show\)ing:' skipwhite nextgroup=netrwHidePat syn match netrwSlash contained "/" syn match netrwHidePat contained "[^,]\+" skipwhite nextgroup=netrwHideSep syn match netrwHideSep contained transparent "," skipwhite nextgroup=netrwHidePat diff --git a/runtime/tutor/tutor.pl b/runtime/tutor/tutor.pl --- a/runtime/tutor/tutor.pl +++ b/runtime/tutor/tutor.pl @@ -1,5 +1,5 @@ =============================================================================== -= W i t a j w t u t o r i a l u V I M - a - Wersja 1.5. = += W i t a j w t u t o r i a l u V I M - a - Wersja 1.7. = =============================================================================== Vim to potny edytor, ktry posiada wiele polece, zbyt duo by @@ -8,10 +8,12 @@ uywa Vim-a jako edytora oglnego przeznaczenia. Czas potrzebny na ukoczenie tutoriala to 25 do 30 minut i zaley - od tego jak wiele czasu spdzisz na eksperymentowaniu. Polecenia - wykonywane w czasie lekcji zmodyfikuj tekst. Zrb wczeniej kopi - tego pliku do wicze (jeli zacze komend "vimtutor" to ju - pracujesz na kopii). + od tego jak wiele czasu spdzisz na eksperymentowaniu. + + UWAGA: + Polecenia wykonywane w czasie lekcji zmodyfikuj tekst. Zrb + wczeniej kopi tego pliku do wicze (jeli zacze komend + "vimtutor" to ju pracujesz na kopii). Wane jest, by pamita, e przewodnik ten zosta zaprojektowany do nauki poprzez wiczenia. To oznacza, e musisz wykonywa polecenia @@ -22,7 +24,7 @@ tak dugo dopki Lekcja 1.1. nie wypeni cakowicie ekranu. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 1.1.: PORUSZANIE SI KURSOREM + Lekcja 1.1.: PORUSZANIE SI KURSOREM ** By wykona ruch kursorem, wcinij h, j, k, l jak pokazano. ** @@ -34,7 +36,7 @@ 1. Poruszaj kursorem dopki nie bdziesz pewien, e pamitasz polecenia. 2. Trzymaj j tak dugo a bdzie si powtarza. ----> Teraz wiesz jak doj do nastpnej lekcji. + Teraz wiesz jak doj do nastpnej lekcji. 3. Uywajc strzaki w d przejd do nastpnej lekcji. @@ -43,35 +45,35 @@ Uwaga: Jeli nie jeste pewien czego co wpisae, wcinij by wrci do Uwaga: Klawisze kursora take powinny dziaa, ale uywajc hjkl bdziesz w stanie porusza si o wiele szybciej jak si tylko przyzwyczaisz. + Naprawd! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 1.2.: WCHODZENIE I WYCHODZENIE Z VIM-a + Lekcja 1.2.: WYCHODZENIE Z VIM-a !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj ca lekcj.!! 1. Wcinij (aby upewni si, e jeste w trybie Normal). 2. Wpisz: :q!. - ----> To spowoduje wyjcie z edytora BEZ zapamitywania zmian jakie + To spowoduje wyjcie z edytora PORZUCAJC wszelkie zmiany jakie zdye zrobi. Jeli chcesz zapamita zmiany i wyj wpisz: :wq 3. Kiedy widzisz znak zachty powoki wpisz komend, eby wrci - do tutoriala. - Powinienie wpisa: vimtutor - Normalnie uyby: vim tutor - ----> 'vim' oznacza edytor vim, 'tutor' jest plikem, ktry chciaby - edytowa. + do tutoriala. Czyli: vimtutor 4. Jeli chcesz zapamita polecenia, wykonaj kroki 1. do 3. aby - wyj i wrci do edytora. Potem przenie si do Lekcji 1.3. + wyj i wrci do edytora. + +UWAGA: :q! porzuca wszelkie zmiany jakie zrobie. W nastpnych +lekcjach dowiesz si jak je zapamitywa. + + 5. Przenie kursor do lekcji 1.3. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 1.3.: EDYCJA TEKSTU - KASOWANIE + Lekcja 1.3.: EDYCJA TEKSTU - KASOWANIE - - ** W trybie Normal wcinij x aby usun znak pod kursorem. ** + ** Wcinij x aby usun znak pod kursorem. ** 1. Przenie kursor do linii poniej oznaczonej --->. @@ -90,11 +92,12 @@ UWAGA: Ucz si przez wiczenie, nie wkuwanie. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 1.4.: EDYCJA TEKSTU - INSERT (wprowadzanie) + Lekcja 1.4.: EDYCJA TEKSTU - INSERT (wprowadzanie) - ** W trybie Normal wcinij i aby wstawi tekst. ** + ** Wcinij i aby wstawi tekst. ** 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. @@ -114,33 +117,79 @@ UWAGA: Ucz si przez wiczenie, nie wkuwanie. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.5.: EDYCJA TEKSTU - APPENDING (dodawanie) + + + ** Wcinij A by doda tekst. ** + + 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. + Nie ma znaczenia, ktry to bdzie znak. + + 2. Wcinij A i wpisz odpowiednie dodatki. + + 3. Kiedy tekst zosta dodany, wcinij i wr do trybu Normalnego. + + 4. Przenie kursor do drugiej linii oznaczonej ---> i powtrz kroki 2 i 3 + aby poprawi zdanie. + +---> Brakuje tu tro + Brakuje tu troch tekstu. +---> Tu te troch bra + Tu te troch brakuje. + + 5. Kiedy ju utrwalie wiczenie przejd do lekcji 1.6. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.6.: EDYCJA PLIKU + + + ** Uyj :wq aby zapisa plik i wyj. ** + + !! UWAGA: zanim wykonasz jakiekolwiek polecenia przeczyaj ca lekcj !! + + 1. Zakocz tutorial tak jak w lekcji 1.2.: :q! + + 2. W powoce wydaj polecenie: vim tutor + "vim" jest poleceniem uruchamiajcym edytor Vimm. 'tutor' to nazwa pliku + jaki chcesz edytowa. Uyj pliku jaki moe zosta zmieniony. + + 3. Dodaj i usu tekst tak jak si nauczye w poprzednich lekcjach. + + 4. Zapisz plik ze zmianami w opu Vima: :wq + + 5. Uruchom ponownie vimtutor i przejd do podsumowania lekcji. + + 6. Po przeczytaniu wszystkich krokw i zrozumieniu ich: wykonaj je. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 1. PODSUMOWANIE 1. Poruszasz kursorem uywajc "strzaek" i klawiszy hjkl . h (w lewo) j (w d) k (do gry) l (w prawo) - 2. By wej do Vim-a (od znaku zachty) wpisz: + 2. By wej do Vim-a (z powoki) wpisz: vim NAZWA_PLIKU 3. By wyj z Vim-a wpisz: :q! by usunc wszystkie zmiany. LUB: :wq by zmiany zachowa. - 4. By usun znak pod kursorem w trybie Normal: x + 4. By usun znak pod kursorem wcinij: x - 5. By wstawi tekst przed kursorem w trybie Normal: - i type in text + 5. By wstawi tekst przed kursorem lub doda: + i wpisz tekst wstawi przed kursorem + A wpisz tekst doda na kocu linii UWAGA: Wcinicie przeniesie Ci z powrotem do trybu Normal lub odwoa niechciane lub czciowo wprowadzone polecenia. Teraz moemy kontynuowa i przej do Lekcji 2. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 2.1.: POLECENIE DELETE (usuwanie) - ** Wpisz dw by usunc tekst do koca wyrazu. ** + ** Wpisz dw by usunc wyraz. ** 1. Wcinij by upewni si, e jeste w trybie Normal. @@ -150,9 +199,9 @@ Teraz moemy kontynuowa i przej do Lekcji 2. 4. Wpisz dw by usunc wyraz. - UWAGA: Litery dw bd si pojawia na dole ekranu w miar - wpisywania. Jeli wpisae co le wcinij i zacznij od - pocztku. + UWAGA: Litera d pojawi si na dole ekranu. Vim czeka na wpisanie w . + Jeli zobaczysz inny znak wpisae co le, wcinij i zacznij + od pocztku. ---> Jest tu par papier wyrazw, ktre kamie nie nale do noyce tego zdania. @@ -183,53 +232,99 @@ Teraz moemy kontynuowa i przej do Lekcji 2. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 2.3.: O POLECENIACH I OBIEKTACH + Lekcja 2.3.: O OPERATORACH I RUCHACH - Format dla polecenia usuwajcego d jest taki: + Wiele polece zmieniajcych tekst s zoone z operatora i ruchu. + Format dla polecenia usuwajcego z operatorem d jest taki: - [liczba] d obiekt LUB d [liczba] obiekt + d ruch Gdzie: - liczba - ile razy polecenie ma by wykonane (opcjonalne, domylna=1). - d - polecenie usuwajce. - obiekt - na czym polecenie bdzie wykonywane (lista poniej). + d - operator usuwania. + ruch - na czym polecenie bdzie wykonywane (lista poniej). + + Krtka lista ruchw: + w - do pocztku nastpnego wyrazu WYCZAJC pierwszy znak. + e - do koca biecego wyrazu, WCZAJC ostatni znak. + $ - do koca linii, WCZAJC ostatni znak. + +W ten sposb wpisanie de usunie znaki od kursora do koca wyrazu. + +UWAGA: Wpisanie tylko ruchu w trybie Normal bez operatora przeniesie kursor + tak jak to okrelono. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.4.: UYCIE MNONIKA DLA RUCHU + - Krtka lista obiektw: - w - od kursora do koca wyrazu wczajc spacj. - e - od kursora do koca wyrazu NIE wczajc spacji. - $ - od kursora do koca linii. + ** Wpisanie liczby przed ruchem powtarza ruch odpowiedni ilo razy. ** + + 1. Przenie kursor na pocztek linii poniej zaznaczonej --->. + + 2. Wpisz 2w aby przenie kursor o dwa wyrazy do przodu. + + 3. Wpisz 3e aby przenie kursor do koca trzeciego wyrazu w przd. -UWAGA: Dla ciekawskich, wybieranie obiektu w trybie Normal bez polecania - polecenia przeniesie kursor tak jak opisano w licie obiektw. + 4. Wpisz 0 (zero) aby przenie kursor do pocztku linii. + + 5. Powtrz kroki 2. i 3. z innymi liczbami. + + + ---> To jest zwyky wiersz z wyrazami po ktrych moesz si porusza. + + 6. Przejd do lekcji 2.5. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 2.4.: WYJTEK DO 'POLECENIE-OBIEKT' + Lekcja 2.5.: UYCIE MNONIKA BY WICEJ USUN - ** Wpisz dd by usunc ca lini. ** + ** Wpisanie liczby z operatorem powtarza go odpowiedni ilo razy. ** + + W wyej wspomnianej kombinacji operatora usuwania i ruchu podaj mnonik + przed ruchem by wicej usun: + d liczba ruch + + 1. Przenie kursor do pierwszego wyrazu KAPITALIKAMI w linii zaznaczonej --->. + + 2. Wpisz 2dw aby usun dwa wyrazy KAPITALIKAMI. + + 3. Powtarzaj kroki 1. i 2. z innymi mnonikami aby usun kolejne wyrazy + KAPITALIKAMI jednym poleceniem - Z powodu czstoci usuwania caych linii, projektanci Vim-a zdecydowali, e - bdzie atwiej wpisa dwa razy pod rzd d aby usun lini. +---> ta ASD WE linia QWE ASDF ZXCV FG wyrazw zostaa ERT FGH CF oczyszczona. + +UWAGA: Mnonik pomidzy operatorem d i ruchem dziaa podobnie do ruchu bez + operatora. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.6.: OPEROWANIE NA LINIACH + + + ** Wpisz dd aby usun ca lini. ** + + Z powodu czstoci usuwania caych linii, projektanci VI zdecydowali, e + bdzie atwiej wpisa dwa razy d aby usun lini. 1. Przenie kursor do zdania poniej. 2. Wpisz dd aby usunc wiersz. 3. Teraz przenie si do czwartego wiersza. - 4. Wpisz 2dd (pamitaj liczba-polecenie-obiekt) aby usunc dwia wiersze. + 4. Wpisz 2dd aby usunc dwia wiersze. - 1) Re s czerwone, - 2) Boto jest fajne, - 3) Fioki s niebieskie, - 4) Mam samochd, - 5) Zegar podaje czas, - 6) Cukier jest sodki, - 7) I ty te. +---> 1) Re s czerwone, +---> 2) Boto jest fajne, +---> 3) Fioki s niebieskie, +---> 4) Mam samochd, +---> 5) Zegar podaje czas, +---> 6) Cukier jest sodki, +---> 7) I ty te. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 2.5.: POLECENIE UNDO (cofnij) + Lekcja 2.7.: POLECENIE UNDO (cofnij) ** Wcinij u aby cofn skutki ostatniego polecenia. @@ -254,62 +349,62 @@ UWAGA: Dla ciekawskich, wybieranie obiek ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 2. PODSUMOWANIE - 1. By usun znaki od kursora do koca wyrazu wpisz: dw + 1. By usun znaki od kursora do nastpnego wyrazu wpisz: dw 2. By usun znaki od kursora do koca linii wpisz: d$ - 3. By usun ca lini: dd - - 4. Format polecenia w trybie Normal: - - [liczba] polecenie obiekt LUB polecenie [liczba] obiekt - - Gdzie: - liczba - ile razy polecenie ma by wykonane - polecenie - to co trzeba zrobi (np. d dla usuwania) - obiekt - na czym polecenie bdzie wykonywane, takie jak w (wyraz), + 4. By powtrzy ruch poprzed go liczb: 2w + 5. Format polecenia zmiany to: + operator [liczba] ruch + gdzie: + operator - to co trzeba zrobi (np. d dla usuwania) + [liczba] - opcjonalne, ile razy powtrzy ruch + ruch - przenosi nad tekstem do operowania, takim jak w (wyraz), $ (do koca linii), etc. - 5. By cofn poprzednie polecenie, wpisz: u (mae u) + 6. By przej do pocztku linii uyj zera: 0 + 7. By cofn poprzednie polecenie, wpisz: u (mae u) By cofn wszystkie zmiany w linii wpisz: U (wielkie U) By cofn cofnicia wpisz: CTRL-R + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 3.1.: POLECENIE PUT (wstaw) - ** Wpisz p by wstawi ostatnie usunicia po kursorze. ** + ** Wpisz p by wstawi ostatnie usunicia za kursorem. ** - 1. Przenie kursor do pierwszej linii w zestawie poniej. + 1. Przenie kursor do pierwszej linii ---> poniej. - 2. Wpisz dd aby usun lini i przechowa j w buforze Vim-a. + 2. Wpisz dd aby usun lini i przechowa j w rejestrze Vim-a. - 3. Przenie kursor do linii POWYEJ tej gdzie usunita linia powinna + 3. Przenie kursor do linii c), POWYEJ tej gdzie usunita linia powinna si znajdowa. - 4. W trybie Normal, wcinij p by wstawi lini. + 4. Wcinij p by wstawi lini poniej kursora. 5. Powtaj kroki 2. do 4. a znajd si w odpowiednim porzdku. - d) Jak dwa anioki. - b) Na dole fioki, - c) A my si kochamy, - a) Na grze re, +---> d) Jak dwa anioki. +---> b) Na dole fioki, +---> c) A my si kochamy, +---> a) Na grze re, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 3.2.: POLECENIE REPLACE (zastp) - ** Wpisz r a nastpnie znak by zastpi znak pod kursorem. ** + ** Wpisz rx aby zastpi znak pod kursorem na x . ** 1. Przenie kursor do pierwszej linii poniej oznaczonej ---> 2. Ustaw kursor na pierwszym bdzie. - 3. Wpisz r a potem znak jaki powinien zastpi bdny. + 3. Wpisz r a potem znak jaki powinien go zastpi. - 4. Powtarzaj kroki 2. i 3. dopki pierwsza linia nie bdzie poprawna. + 4. Powtarzaj kroki 2. i 3. dopki pierwsza linia nie bdzie taka jak druga. ---> Kjedy ten wiersz bi wstkiwany kto wcizn per zych klawirzy! ---> Kiedy ten wiersz by wstukiwany kto wcisn par zych klawiszy! @@ -321,18 +416,17 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 3.3.: POLECENIE CHANGE (zmie) + Lekcja 3.3.: OPERATOR CHANGE (zmie) - ** By zmieni cae sowo lub jego cz wpisz cw (change word). ** + ** By zmieni do koca wyrazu wpisz ce . ** 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. 2. Umie kursor na u w lunos. - 3. Wpisz cw i popraw wyraz (w tym wypadku wstaw 'inia'). + 3. Wpisz ce i popraw wyraz (w tym wypadku wstaw inia ). - 4. Wcinij i przejd do nastpnego bdu (pierwszy znak, ktry ma - ulec zmianie). + 4. Wcinij i przejd do nastpnej planowanej zmiany. 5. Powtarzaj kroki 3. i 4. dopki pierwsze zdanie nie bdzie takie same jak drugie. @@ -340,20 +434,21 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. ---> Ta lunos ma pire sw, ktre tina zbnic uifajonc pcmazu zmie. ---> Ta linia ma par sw, ktre trzeba zmieni uywajc polecenia zmie. - Zauwa, e cw nie tylko zamienia wyraz, ale take zmienia tryb na + Zauwa, e ce nie tylko zamienia wyraz, ale take zmienia tryb na Insert (wprowadzanie). + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 3.4.: WICEJ ZMIAN UYWAJC c - ** Polecenie change uywa takich samych obiektw jak delete. ** + ** Polecenie change uywa takich samych ruchw jak delete. ** - 1. Polecenie change dziaa tak samo jak delete. Format wyglda tak: + 1. Operator change dziaa tak samo jak delete. Format wyglda tak: - [liczba] c obiekt LUB c [liczba] obiekt + c [liczba] ruch - 2. Obiekty s take takie same, np.: w (wyraz), $ (koniec linii), etc. + 2. Ruchy s take takie same, np.: w (wyraz), $ (koniec linii), etc. 3. Przenie si do pierwszej linii poniej oznaczonej ---> @@ -364,7 +459,7 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. ---> Koniec tego wiersza musi by poprawiony aby wygldal tak jak drugi. ---> Koniec tego wiersza musi by poprawiony uywajc polecenia c$ . - +UWAGA: Moesz uywa aby poprawia bdy w czasie pisania. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 3. PODSUMOWANIE @@ -377,41 +472,41 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. 2. By zamieni znak pod kursorem wcinij r a potem znak, ktry ma zastpi oryginalny. - 3. Polecenie change pozwala Ci na zastpienie wyszczeglnionego obiektu - od kursora do koca obiektu. Np. wpisz cw aby zamieni tekst od - kursora do koca wyrazu, c$ aby zmieni tekst do koca linii. + 3. Operator change pozwala Ci na zastpienie od kursora do miejsca gdzie + zabraby ci ruch. Np. wpisz ce aby zamieni tekst od kursora do koca + wyrazu, c$ aby zmieni tekst do koca linii. 4. Format do polecenia change (zmie): - [liczba] c obiekt LUB c [liczba] obiekt + c [liczba] obiekt Teraz przejd do nastpnej lekcji. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 4.1.: LOKALIZACJA ORAZ STATUS PLIKU + Lekcja 4.1.: POOENIE KURSORA ORAZ STATUS PLIKU ** Nacinij CTRL-G aby zobaczy swoje pooenie w pliku i status - pliku. Nacinij SHIFT-G aby przej do linii w pliku. ** + pliku. Nacinij G aby przej do linii w pliku. ** UWAGA: Przeczytaj ca lekcj zanim wykonasz jakie polecenia!!! - 1. Przytrzymaj klawisz CTRL i wcinij g . Na dole strony pojawi si pasek - statusu z nazw pliku i numerem linii, w ktrej jeste. Zapamitaj numer - linii dla potrzeb kroku 3. + 1. Przytrzymaj klawisz CTRL i wcinij g . Uywamy notacji CTRL-G. + Na dole strony pojawi si pasek statusu z nazw pliku i pozycj w pliku. + Zapamitaj numer linii dla potrzeb kroku 3. - 2. Wcinij SHIFT-G aby przej na koniec pliku. +UWAGA: Moesz te zobaczy pozycj kursora w prawym, dolnym rogu ekranu. + Dzieje si tak kiedy ustawiona jest opcja 'ruler' (wyjanione w lekcji 6.). - 3. Wpisz numer linii, w ktrej bye a potem SHIFT-G. To przeniesie Ci - z powrotem do linii, w ktrej bye kiedy wcisne CTRL-G (kiedy - wpisujesz numery NIE pojawiaj si one na ekranie). + 2. Wcinij G aby przej na koniec pliku. + Wcinij gg aby przej do pocztku pliku. + + 3. Wpisz numer linii, w ktrej bye a potem G . To przeniesie ci + z powrotem do linii, w ktrej bye kiedy wcisne CTRL-G. 4. Jeli czujesz si wystarczajco pewnie, wykonaj kroki 1-3. - - - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 4.2.: POLECENIE SZUKAJ @@ -424,16 +519,16 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. 2. Teraz wpisz bond . To jest sowo, ktrego chcesz szuka. 3. By szuka tej samej frazy ponownie, po prostu wcinij n . - Aby szuka tej frazy w przeciwnym, kierunku wcinij SHIFT-N. + Aby szuka tej frazy w przeciwnym, kierunku wcinij N . 4. Jeli chcesz szuka frazy do tyu, uyj polecenia ? zamiast / . ----> Kiedy polecenie 'szukaj' osignie koniec pliku, przeszukiwanie - zacznie si od pocztku pliku. + 5. Aby wrci gdzie bye wcinij CTRL-O. Powtarzaj by wrci dalej. CTRL-I + idzie do przodu. - 'bond' to nie jest metoda by przeliterowa bd; 'bond' to bd. - - +UWAGA: 'bond' to nie jest metoda by przeliterowa bd; 'bond' to bd. +UWAGA: Kiedy szukanie osignie koniec pliku bdzie kontynuowao od pocztku +o ile opcja 'wrapscan' nie zostaa przestawiona. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 4.3.: W POSZUKIWANIU PARUJCYCH NAWIASW @@ -449,6 +544,8 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. 4. Wcinij % aby przenie kursor z powrotem do parujcego nawiasu. + 5. Przenie kursor do innego (,),[,],{ lub } i zobacz co robi % . + ---> To ( jest linia testowa z (, [, ] i {, } . )) UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu @@ -456,10 +553,8 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu - - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 4.4.: INNA METODA POPRAWIANIA BDW + Lekcja 4.4.: POLECENIE SUBSTITUTE (zamiana) ** Wpisz :s/stary/nowy/g aby zamieni 'stary' na 'nowy'. ** @@ -469,30 +564,32 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu 2. Wpisz :s/czaas/czas . Zauwa, e to polecenie zmienia tylko pierwsze wystpienie 'czaas' w linii. - 3. Teraz wpisz :s/czaas/czas/g oznacza zamian (substytucj) - globalnie w caej linii. Zmienia wszystkie wystpienia w linii. + 3. Teraz wpisz :s/czaas/czas/g . Dodane g oznacza zamian (substytucj) + globalnie w caej linii. Zmienia wszystkie wystpienia 'czaas' w linii. ---> Najlepszy czaas na zobaczenie najadniejszych kwiatw to czaas wiosny. 4. Aby zmieni wszystkie wystpienia acucha znakw pomidzy dwoma liniami, - wpisz: :#,#s/stare/nowe/g gdzie #,# s numerami dwch linii. - Wpisz :%s/stare/nowe/g by zmieni wszystkie wystpienia w caym pliku. - - - + wpisz: :#,#s/stare/nowe/g gdzie #,# s numerami linii ograniczajcych + region gdzie ma nastpi zamiana. + wpisz :%s/stare/nowe/g by zmieni wszystkie wystpienia w caym pliku. + wpisz :%s/stare/nowe/gc by zmieni wszystkie wystpienia w caym + pliku, proszc o potwierdzenie za kadym razem ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 4. PODSUMOWANIE - - 1. CTRL-G pokae Twoj pozycj w pliku i status pliku. SHIFT-G przenosi - Ci do koca pliku. SHIFT-G poprzedzony liczb przenosi Ci do linii - o tym numerze. + 1. CTRL-G pokae Twoj pozycj w pliku i status pliku. SHIFT-G przenosi + ci do koca pliku. + G przenosi do koca pliku. + liczba G przenosi do linii [liczba]. + gg przenosi do pierwszej linii. 2. Wpisanie / a nastpnie acucha znakw szuka acucha DO PRZODU. Wpisanie ? a nastpnie acucha znakw szuka acucha DO TYU. Po wyszukiwaniu wcinij n by znale nastpne wystpienie szukanej - frazy tym samym kierunku lub Shift-N by szuka w kierunku przeciwnym. + frazy tym samym kierunku lub N by szuka w kierunku przeciwnym. + CTRL-O przenosi do starszych pozycji, CTRL-I do nowszych. 3. Wpisanie % gdy kursor znajduje si na (,),[,],{, lub } lokalizuje parujcy znak. @@ -502,8 +599,6 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu By zamieni frazy pomidzy dwoma liniami # wpisz :#,#s/stary/nowy/g By zamieni wszystkie wystpienia w pliku wpisz :%s/stary/nowy/g By Vim prosi Ci o potwierdzienie dodaj 'c' :%s/stary/nowy/gc - - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 5.1.: JAK WYKONA POLECENIA ZEWNTRZNE @@ -520,9 +615,9 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu pokae spis plikw w Twoim katalogu, tak jakby by przy znaku zachty powoki. Moesz te uy :!dir jeli ls nie dziaa. ----> Uwaga: W ten sposb mona wykona wszystkie polecenia powoki. ----> Uwaga: Wszystkie polecenia : musz by zakoczone . - +Uwaga: W ten sposb mona wykona wszystkie polecenia powoki. +Uwaga: Wszystkie polecenia : musz by zakoczone . + Od tego momentu nie zawsze bdziemy o tym wspomina. @@ -531,7 +626,7 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu Lekcja 5.2.: WICEJ O ZAPISYWANIU PLIKW - ** By zachowa zmiany w pliku wpisz :w NAZWA_PLIKU . ** + ** By zachowa zmiany w tekci wpisz :w NAZWA_PLIKU . ** 1. Wpisz :!dir lub :!ls by zobaczy spis plikw w katalogu. Ju wiesz, e musisz wcisn po tym. @@ -541,37 +636,37 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu 3. Teraz wpisz: :w TEST (gdzie TEST jest nazw pliku jak wybrae.) 4. To polecenie zapamita cay plik (Vim Tutor) pod nazw TEST. - By to sprawdzi wpisz :!dir , eby znowu zobaczy list plikw. + By to sprawdzi wpisz :!dir lub :!ls , eby znowu zobaczy list plikw. ----> Zauwa, e gdyby teraz wyszed z Vim-a, a nastpnie wszed ponownie - komend vim TEST , plik byby dokadn kopi tutoriala kiedy go - zapisywae. +Uwaga: Zauwa, e gdyby teraz wyszed z Vim-a, a nastpnie wszed ponownie + komend vim TEST , plik byby dokadn kopi tutoriala kiedy go + zapisywae. 5. Teraz usu plik wpisujc: :!rm TEST ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 5.3.: SELEKTYWNE POLECENIE WRITE (zapisz) + Lekcja 5.3.: WYBRANIE TEKSTU DO ZAPISU - ** By zachowa cz pliku wpisz :#,# w NAZWA_PLIKU ** + ** By zachowa cz pliku wpisz v ruch :w NAZWA_PLIKU ** + + 1. Przenie kursor do tego wiersza. - 1. Jeszcze raz wpisz :!dir lub :!ls by uzyska list plikw - w katalogu i wybierz odpowiedni nazw tak jak TEST. + 2. Wcinij v i przenie kursor do punktu 5. Zauwa, e tekst zosta + podwietlony. - 2. Przenie kursor na gre tej strony i wcinij CTRL-G by uzyska - numer linii. ZAPAMITAJ T LICZB! + 3. Wcinij znak : . Na dole ekranu pojawi si :'<,'> . - 3. Teraz przenie si na d strony i wpisz CTRL-G znowu. ZAPAMITAJ - NUMER TAKE TEJ LINII! + 4. Wpisz w TEST , gdzie TEST to nazwa pliku, ktry jeszcze nie istnieje. + Upewnij si, e widzisz :'<,'>w TEST zanim wciniesz Enter. - 4. By zachowa JEDYNIE cz pliku wpisz :#,# w TEST gdzie #,# to - dwie liczby jakie zapamitae (gra, d ekranu), a TEST to nazwa - Twojego pliku. + 5. Vim zapisze wybrane linie do pliku TEST. Uyj :!dir lub :!ls , eby to + zobaczy. Jeszcze go nie usuwaj! Uyjemy go w nastpnej lekcji. - 5. Ponownie sprawd czy ten plik tam jest ( :!dir ), ale NIE usuwaj go. - - +UWAGA: Wcinicie v zaczyna tryb Wizualny. Moesz porusza kursorem by + zmieni rozmiary zaznaczenia. Moesz te uy operatora by zrobi co + z tekstem. Na przykad d usuwa tekst. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 5.4.: WSTAWIANIE I CZENIE PLIKW @@ -579,21 +674,21 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu ** By wstawi zawarto pliku wpisz :r NAZWA_PLIKU ** - 1. Wpisz :!dir by si upewni, ze Twj plik TEST zosta poprawnie - zapamitany. + 1. Umie kursor tu powyej tej linii. - 2. Umie kursor na grze strony. - -UWAGA: Po wykonaniu kroku 3. ponownie zobaczysz Lekcj 5.3. Potem przejd +UWAGA: Po wykonaniu kroku 2. zobaczysz tekst z Lekcji 5.3. Potem przejd do DOU by zobaczy ponownie t lekcj. - 3. Teraz wczytaj plik TEST uywajc polecenia :r TEST , gdzie TEST + 2. Teraz wczytaj plik TEST uywajc polecenia :r TEST , gdzie TEST jest nazw pliku. + Wczytany plik jest umieszczony poniej linii z kursorem. -UWAGA: Plik, ktry wczytujesz jest wstawiany tam gdzie by kursor. + 3. By sprawdzi czy plik zosta wczytany cofnij kursor i zobacz, e + teraz s dwie kopie Lekcji 5.3., orygina i kopia z pliku. - 4. By sprawdzi czy plik zosta wczytany cofnij kursor i zobacz, e - teraz s dwie kopie Lekcji 5.3., orygina i kopia z pliku. +UWAGA: Moesz te wczyta wyjcie zewntrznego polecenia. Na przykad + :r !ls wczytuje wyjcie polecenia ls i umieszcza je pod kursorem. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -610,12 +705,12 @@ UWAGA: Plik, ktry wczytujesz jest wstawiany tam gdzie by kursor. 2. :w NAZWA_PLIKU zapisuje obecny plik Vim-a na dysk z nazw NAZWA_PLIKU. - 3. :#,#w NAZWA_PLIKU zapisuje linie od # do # w pliku NAZWA_PLIKU. + 3. v ruch :w NAZWA_PLIKU zapisuje Wizualnie wybrane linie do NAZWA_PLIKU. 4. :r NAZWA_PLIKU wczytuje z dysku plik NAZWA_PLIKU i wstawia go do - biecego pliku po kursorze. + biecego pliku poniej kursora. - + 5. :r !dir wczytuje wyjcie polecenia dir i umieszcza je poniej kursora. @@ -631,16 +726,16 @@ UWAGA: Plik, ktry wczytujesz jest wstawiany tam gdzie by kursor. 2. Wpisz o (mae) by otworzy lini PONIEJ kursora i przenie si do trybu Insert (wprowadzanie). - 3. Teraz przepisz lini oznaczon ---> i wcinij by wyj - z trybu Insert (wprowadzanie). + 3. Wpisz troch tekstu i wcinij by wyj z trybu Insert (wprowadzanie). ----> Po wciniciu o kursor znajdzie si w otwartej linii w trybie - Insert (wprowadzanie). +---> Po wciniciu o kursor znajdzie si w otwartej linii w trybie Insert. 4. By otworzy lini POWYEJ kursora wcinij wielkie O zamiast maego o . Wyprbuj to na linii poniej. - Otwrz lini powyej wciskajc SHIFT-O gdy kursor bdzie na tej linii. +---> Otwrz lini powyej wciskajc SHIFT-O gdy kursor bdzie na tej linii. + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 6.2.: POLECENIE APPEND (dodaj) @@ -648,137 +743,203 @@ UWAGA: Plik, ktry wczytujesz jest wstawiany tam gdzie by kursor. ** Wpisz a by doda tekst ZA kursorem. ** - 1. Przenie kursor do koca pierwszej linii poniej oznaczonej ---> - Zrb to wciskajc $ w trybie Normal. + 1. Przenie kursor do pocztku pierwszej linii poniej oznaczonej ---> - 2. Wpisz a (mae) aby doda tekst ZA znakiem pod kursorem. - Wielkie A dodaje tekst na kocu linii. + 2. Wciskaj e dopki kursor nie bdzie na kocu li . + + 3. Wpisz a (mae) aby doda tekst ZA znakiem pod kursorem. -Uwaga: To oszczdza wpisania: ostatni znak ( $ ), i , tekst do dodania, - , strzaka w prawo i ostatecznie x , tylko po to by doda - tekst na kocu linii. + 4. Dokocz wyraz tak jak w linii poniej. Wcinij aby opuci tryb + Insert. - 3. Teraz dokocz pierwsz lini. Zauwa take, e append (dodaj) - dziaa tak samo jak tryb Insert (wprowadzanie) z wyjtkiem tego gdzie - tekst jest wstawiany. + 5. Uyj e by przej do kolejnego niedokoczonego wyraze i powtarzaj kroki + 3. i 4. ----> Ta linia pozwoli Ci wiczy +---> Ta li poz Ci wi dodaw teks do ko lin ---> Ta linia pozwoli Ci wiczy dodawanie tekstu do koca linii. +Uwaga: a , i and A prowadz do trybu Insert, jedyn rnic jest miejsce + gdzie nowe znaki bd dodawane. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 6.3.: INNA WERSJA REPLACE (zamiana) ** Wpisz wielkie R by zamieni wicej ni jeden znak. ** - 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. + 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. Przenie + kursor do pierwszego xxx . - 2. Umie kursor na pocztku pierwszego wyrazu, ktry rzni si od - drugiej linii oznaczonej ---> (wyraz 'ostatni'). + 2. Wcinij R i wpisz numer poniej w drugiej linii, tak, e zastpi on + xxx. + + 3. Wcinij by opuci tryb Replace. Zauwa, e reszta linii pozostaje + niezmieniona. - 3. Teraz wpisz R i zamie reszt tekstu w pierwszej linii przez - nadpisanie nad starym tekstem tak aby pierwsza linia brzmiaa tak samo - jak druga. + 5. Powtarzaj kroki by wymieni wszystkie xxx. + +---> Dodanie 123 do xxx daje xxx. +---> Dodanie 123 do 456 daje 579. ----> To make the first line the same as the last on this page use the keys. ----> To make the first line the same as the second, type R and the new text. +UWAGA: Tryb Replace jest jak tryb Insert, ale kady znak usuwa istniejcy + znak. - 4. Zauwa, e kiedy wciniesz aby wyj niezmieniony tekst - pozostaje. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 6.4.: KOPIOWANIE I WKLEJANIE TEKSTU + ** uyj operatora y aby skopiowa tekst i p aby go wklei ** + + 1. Przejd do linii oznaczonej ---> i umiec kursor za "a)". + + 2. Wejd w tryb Visual v i przenie kursor na pocztek "pierwszy". + + 3. Wcinij y aby yankowa (kopiowa) podwietlony tekst. + + 4. Przenie kursor do koca nastpnej linii: j$ + + 5. Wcinij p aby wpakowa (paste) tekst. Dodaj: a drugi . + + 6. Uyj trybu Visual aby wybra " element.", yankuj go y , przejd do koca + nastpnej linii j$ i upakuj tam tekst z p . + +---> a) to jest pierwszy element. + b) +Uwaga: moesz uy y jako operatora; yw kopiuje jeden wyraz. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 6.4.: USTAWIANIE OPCJI + Lekcja 6.5.: USTAWIANIE OPCJI ** Ustawianie opcji tak by szukaj lub substytucja ignoroway wielko liter ** - 1. Szukaj 'ignore' wpisujc (w trybie Normal): - /ignore + 1. Szukaj 'ignore' wpisujc: /ignore Powtrz szukanie kilka razy naciskajc klawisz n . 2. Ustaw opcj 'ic' (Ignore case -- ignoruj wielko liter) poprzez wpisanie: :set ic - 3. Teraz szukaj 'ignore' ponownie wciskujc: n - Powtrz szukanie kilka razy naciskajc klawisz n . + 3. Teraz szukaj 'ignore' ponownie wciskujc: n + Zauwa, e Ignore i IGNORE take s teraz znalezione. - 4. Ustaw opcje 'hlsearch' i 'incsearch': - :set hls is + 4. Ustaw opcje 'hlsearch' i 'incsearch': :set hls is 5. Teraz wprowad polecenie szukaj ponownie i zobacz co si zdarzy: - /ignore + /ignore + 6. Aby wyczy ignorowanie wielkoci liter: :set noic +Uwaga: Aby usun podwietlanie dopasowa wpisz: :nohlsearch +Uwaga: Aby ignorowa wielko liter dla jednego wyszukiwania: /ignore\c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 6. PODSUMOWANIE - 1. Wpisanie o otwiera lini PONIEJ kursora i umieszcza kursor - w otwartej linii w trybie Insert (wprowadzanie). - Wpisanie wielkiego O otwiera lini POWYEJ linii, w ktrej - znajduje si kursor. - + 1. Wpisanie o otwiera lini PONIEJ kursora. + Wpisanie wielkiego O otwiera lini POWYEJ kursora. 2. Wpisz a by wstawi tekst ZA znakiem na, ktrym jest kursor. - Wpisanie wielkiego A automatycznie dodaje tekst na kocu linii. - - 3. Wpisanie wielkiego R wprowadza w tryb Replace (zamiana) dopki + Wpisanie wielkiego A dodaje tekst na kocu linii. + 3. Polecenie e przenosi do koca wyrazu. + 4. Operato y yankuje (kopiuje) tekst, p pakuje (wkleja, paste) go. + 5. Wpisanie wielkiego R wprowadza w tryb Replace (zamiana) dopki nie zostanie wcinity . - - 4. Wpisanie ":set xxx" ustawia opcj "xxx". - - + 6. Wpisanie ":set xxx" ustawia opcj "xxx". Nietkre opcje: + 'ic' 'ignorecase' ignoruj wielko znakw + 'is' 'incsearch' poka czciowe dopasowania + 'hls' 'hlsearch' podwietl wszystkie dopasowania + Moesz uy zarwno dugiej jak i krtkiej formy. + 7. Dodaj "no" aby wyczy opcj: :set noic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - LEKCJA 7. POLECENIA POMOCY ON-LINE - + LEKCJA 7.1. JAK UZYSKA POMOC ** Uycie systemu pomocy on-line ** Vim posiada bardzo dobry system pomocy on-line. By zacz sprbuj jednej z trzech moliwoci: - - wcinij klawisz (jeli takowy posiadasz) - wcinij klawisz (jeli takowy posiadasz) - wpisz :help - Wpisz :q by zamknc okno pomocy. + Przeczytaj tekst w oknie pomocy aby dowiedzie si jak dziaa pomoc. + wpisz CTRL-W CTRL-W aby przeskoczy z jednego okna do innego + wpisz :q aby zamkn okno pomocy. Moesz te znale pomoc na kady temat podajc argument polecenia ":help". Sprbuj tych (nie zapomnij wcisn ): :help w - :help c_ ** + + 1. Upewnij si, e Vim nie jest w trybie kompatybilnoci: :set nocp + + 2. Zerknij jakie pliki s w biecm katalogu: :!ls lub :!dir + + 3. Wpisz pocztek polecenia: :e + + 4. Wcinij CTRL-D i Vim pokae list polece jakie zaczynaj si na "e". + + 5. Wcinij i Vim uzupeni polecenie do ":edit". + + 6. Dodaj spacj i zacznij wpisywa nazw istniejcego pliku: :edit FIL + + 7. Wcinij . Vim uzupeni nazw (jeli jest niepowtarzalna). + +UWAGA: Uzupenianie dziaa dla wielu polece. Sprbuj wcisn CTRL-D i . + Uyteczne zwaszcza przy :help . +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 7. PODSUMOWANIE + + + 1. Wpisz :help lub wcinij lub aby otworzy okno pomocy. + + 2. Wpisz :help cmd aby uzyska pomoc o cmd . + + 3. Wpisz CTRL-W CTRL-W aby przeskoczy do innego okna. + + 4. Wpisz :q aby zamkn okno pomocy. + + 5. Utwrz plik startowy vimrc aby zachowa wybrane ustawienia. + + 6. Po poleceniu : , wcinij CTRL-D aby zobaczy moliwe uzupenienia. + Wcinij aby uy jednego z nich. + + + + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -826,5 +987,5 @@ Uwaga: To oszczdza wpisania: ostatni znak ( $ ), i , tekst do dodania, Przetumaczone przez Mikoaja Machowskiego, Sierpie 2001, rev. Marzec 2002 + 2nd rev. Wrzesie 2004 Wszelkie uwagi prosz kierowa na: mikmach@wp.pl - diff --git a/runtime/tutor/tutor.pl.cp1250 b/runtime/tutor/tutor.pl.cp1250 --- a/runtime/tutor/tutor.pl.cp1250 +++ b/runtime/tutor/tutor.pl.cp1250 @@ -1,5 +1,5 @@ =============================================================================== -= W i t a j w t u t o r i a l u V I M - a - Wersja 1.5. = += W i t a j w t u t o r i a l u V I M - a - Wersja 1.7. = =============================================================================== Vim to potny edytor, ktry posiada wiele polece, zbyt duo by @@ -8,21 +8,23 @@ uywa Vim-a jako edytora oglnego przeznaczenia. Czas potrzebny na ukoczenie tutoriala to 25 do 30 minut i zaley - od tego jak wiele czasu spdzisz na eksperymentowaniu. Polecenia - wykonywane w czasie lekcji zmodyfikuj tekst. Zrb wczeniej kopi - tego pliku do wicze (jeli zacze komend "vimtutor" to ju - pracujesz na kopii). + od tego jak wiele czasu spdzisz na eksperymentowaniu. + + UWAGA: + Polecenia wykonywane w czasie lekcji zmodyfikuj tekst. Zrb + wczeniej kopi tego pliku do wicze (jeli zacze komend + "vimtutor" to ju pracujesz na kopii). Wane jest, by pamita, e przewodnik ten zosta zaprojektowany do nauki poprzez wiczenia. To oznacza, e musisz wykonywa polecenia by nauczy si ich prawidowo. Jeli bdziesz jedynie czyta tekst szybko zapomnisz wiele polece! - Teraz upewnij si, e nie masz wcinitego CapsLocka i wciskaj j + Teraz upewnij si, e nie masz wcinitego CapsLocka i wciskaj j tak dugo dopki Lekcja 1.1. nie wypeni cakowicie ekranu. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 1.1.: PORUSZANIE SI KURSOREM + Lekcja 1.1.: PORUSZANIE SI KURSOREM ** By wykona ruch kursorem, wcinij h, j, k, l jak pokazano. ** @@ -34,7 +36,7 @@ 1. Poruszaj kursorem dopki nie bdziesz pewien, e pamitasz polecenia. 2. Trzymaj j tak dugo a bdzie si powtarza. ----> Teraz wiesz jak doj do nastpnej lekcji. + Teraz wiesz jak doj do nastpnej lekcji. 3. Uywajc strzaki w d przejd do nastpnej lekcji. @@ -43,35 +45,35 @@ Uwaga: Jeli nie jeste pewien czego co wpisae, wcinij by wrci do Uwaga: Klawisze kursora take powinny dziaa, ale uywajc hjkl bdziesz w stanie porusza si o wiele szybciej jak si tylko przyzwyczaisz. + Naprawd! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 1.2.: WCHODZENIE I WYCHODZENIE Z VIM-a + Lekcja 1.2.: WYCHODZENIE Z VIM-a !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj ca lekcj.!! 1. Wcinij (aby upewni si, e jeste w trybie Normal). 2. Wpisz: :q!. - ----> To spowoduje wyjcie z edytora BEZ zapamitywania zmian jakie + To spowoduje wyjcie z edytora PORZUCAJC wszelkie zmiany jakie zdye zrobi. Jeli chcesz zapamita zmiany i wyj wpisz: :wq 3. Kiedy widzisz znak zachty powoki wpisz komend, eby wrci - do tutoriala. - Powinienie wpisa: vimtutor - Normalnie uyby: vim tutor - ----> 'vim' oznacza edytor vim, 'tutor' jest plikem, ktry chciaby - edytowa. + do tutoriala. Czyli: vimtutor 4. Jeli chcesz zapamita polecenia, wykonaj kroki 1. do 3. aby - wyj i wrci do edytora. Potem przenie si do Lekcji 1.3. + wyj i wrci do edytora. + +UWAGA: :q! porzuca wszelkie zmiany jakie zrobie. W nastpnych +lekcjach dowiesz si jak je zapamitywa. + + 5. Przenie kursor do lekcji 1.3. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 1.3.: EDYCJA TEKSTU - KASOWANIE + Lekcja 1.3.: EDYCJA TEKSTU - KASOWANIE - - ** W trybie Normal wcinij x aby usun znak pod kursorem. ** + ** Wcinij x aby usun znak pod kursorem. ** 1. Przenie kursor do linii poniej oznaczonej --->. @@ -90,11 +92,12 @@ UWAGA: Ucz si przez wiczenie, nie wkuwanie. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 1.4.: EDYCJA TEKSTU - INSERT (wprowadzanie) + Lekcja 1.4.: EDYCJA TEKSTU - INSERT (wprowadzanie) - ** W trybie Normal wcinij i aby wstawi tekst. ** + ** Wcinij i aby wstawi tekst. ** 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. @@ -114,35 +117,81 @@ UWAGA: Ucz si przez wiczenie, nie wkuwanie. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.5.: EDYCJA TEKSTU - APPENDING (dodawanie) + + + ** Wcinij A by doda tekst. ** + + 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. + Nie ma znaczenia, ktry to bdzie znak. + + 2. Wcinij A i wpisz odpowiednie dodatki. + + 3. Kiedy tekst zosta dodany, wcinij i wr do trybu Normalnego. + + 4. Przenie kursor do drugiej linii oznaczonej ---> i powtrz kroki 2 i 3 + aby poprawi zdanie. + +---> Brakuje tu tro + Brakuje tu troch tekstu. +---> Tu te troch bra + Tu te troch brakuje. + + 5. Kiedy ju utrwalie wiczenie przejd do lekcji 1.6. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.6.: EDYCJA PLIKU + + + ** Uyj :wq aby zapisa plik i wyj. ** + + !! UWAGA: zanim wykonasz jakiekolwiek polecenia przeczyaj ca lekcj !! + + 1. Zakocz tutorial tak jak w lekcji 1.2.: :q! + + 2. W powoce wydaj polecenie: vim tutor + "vim" jest poleceniem uruchamiajcym edytor Vimm. 'tutor' to nazwa pliku + jaki chcesz edytowa. Uyj pliku jaki moe zosta zmieniony. + + 3. Dodaj i usu tekst tak jak si nauczye w poprzednich lekcjach. + + 4. Zapisz plik ze zmianami w opu Vima: :wq + + 5. Uruchom ponownie vimtutor i przejd do podsumowania lekcji. + + 6. Po przeczytaniu wszystkich krokw i zrozumieniu ich: wykonaj je. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 1. PODSUMOWANIE - 1. Poruszasz kursorem uywajc "strzaek" i klawiszy hjkl . + 1. Poruszasz kursorem uywajc "strzaek" i klawiszy hjkl . h (w lewo) j (w d) k (do gry) l (w prawo) - 2. By wej do Vim-a (od znaku zachty) wpisz: + 2. By wej do Vim-a (z powoki) wpisz: vim NAZWA_PLIKU 3. By wyj z Vim-a wpisz: :q! by usunc wszystkie zmiany. LUB: :wq by zmiany zachowa. - 4. By usun znak pod kursorem w trybie Normal: x + 4. By usun znak pod kursorem wcinij: x - 5. By wstawi tekst przed kursorem w trybie Normal: - i type in text + 5. By wstawi tekst przed kursorem lub doda: + i wpisz tekst wstawi przed kursorem + A wpisz tekst doda na kocu linii UWAGA: Wcinicie przeniesie Ci z powrotem do trybu Normal lub odwoa niechciane lub czciowo wprowadzone polecenia. Teraz moemy kontynuowa i przej do Lekcji 2. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 2.1.: POLECENIE DELETE (usuwanie) + Lekcja 2.1.: POLECENIE DELETE (usuwanie) - ** Wpisz dw by usunc tekst do koca wyrazu. ** + ** Wpisz dw by usunc wyraz. ** - 1. Wcinij by upewni si, e jeste w trybie Normal. + 1. Wcinij by upewni si, e jeste w trybie Normal. 2. Przenie kursor do linii poniej oznaczonej --->. @@ -150,9 +199,9 @@ Teraz moemy kontynuowa i przej do Lekcji 2. 4. Wpisz dw by usunc wyraz. - UWAGA: Litery dw bd si pojawia na dole ekranu w miar - wpisywania. Jeli wpisae co le wcinij i zacznij od - pocztku. + UWAGA: Litera d pojawi si na dole ekranu. Vim czeka na wpisanie w . + Jeli zobaczysz inny znak wpisae co le, wcinij i zacznij + od pocztku. ---> Jest tu par papier wyrazw, ktre kamie nie nale do noyce tego zdania. @@ -163,15 +212,15 @@ Teraz moemy kontynuowa i przej do Lekcji 2. Lekcja 2.2.: WICEJ POLECE USUWAJCYCH - ** Wpisz d$ aby usun tekst do koca linii. ** + ** Wpisz d$ aby usun tekst do koca linii. ** - 1. Wcinij aby si upewni, e jeste w trybie Normal. + 1. Wcinij aby si upewni, e jeste w trybie Normal. 2. Przenie kursor do linii poniej oznaczonej --->. 3. Przenie kursor do koca poprawnego zdania (PO pierwszej . ). - 4. Wpisz d$ aby usun reszt linii. + 4. Wpisz d$ aby usun reszt linii. ---> Kto wpisa koniec tego zdania dwukrotnie. zdania dwukrotnie. @@ -183,53 +232,99 @@ Teraz moemy kontynuowa i przej do Lekcji 2. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 2.3.: O POLECENIACH I OBIEKTACH + Lekcja 2.3.: O OPERATORACH I RUCHACH - Format dla polecenia usuwajcego d jest taki: + Wiele polece zmieniajcych tekst s zoone z operatora i ruchu. + Format dla polecenia usuwajcego z operatorem d jest taki: - [liczba] d obiekt LUB d [liczba] obiekt + d ruch Gdzie: - liczba - ile razy polecenie ma by wykonane (opcjonalne, domylna=1). - d - polecenie usuwajce. - obiekt - na czym polecenie bdzie wykonywane (lista poniej). + d - operator usuwania. + ruch - na czym polecenie bdzie wykonywane (lista poniej). + + Krtka lista ruchw: + w - do pocztku nastpnego wyrazu WYCZAJC pierwszy znak. + e - do koca biecego wyrazu, WCZAJC ostatni znak. + $ - do koca linii, WCZAJC ostatni znak. + +W ten sposb wpisanie de usunie znaki od kursora do koca wyrazu. + +UWAGA: Wpisanie tylko ruchu w trybie Normal bez operatora przeniesie kursor + tak jak to okrelono. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.4.: UYCIE MNONIKA DLA RUCHU + - Krtka lista obiektw: - w - od kursora do koca wyrazu wczajc spacj. - e - od kursora do koca wyrazu NIE wczajc spacji. - $ - od kursora do koca linii. + ** Wpisanie liczby przed ruchem powtarza ruch odpowiedni ilo razy. ** + + 1. Przenie kursor na pocztek linii poniej zaznaczonej --->. + + 2. Wpisz 2w aby przenie kursor o dwa wyrazy do przodu. + + 3. Wpisz 3e aby przenie kursor do koca trzeciego wyrazu w przd. -UWAGA: Dla ciekawskich, wybieranie obiektu w trybie Normal bez polecania - polecenia przeniesie kursor tak jak opisano w licie obiektw. + 4. Wpisz 0 (zero) aby przenie kursor do pocztku linii. + + 5. Powtrz kroki 2. i 3. z innymi liczbami. + + + ---> To jest zwyky wiersz z wyrazami po ktrych moesz si porusza. + + 6. Przejd do lekcji 2.5. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 2.4.: WYJTEK DO 'POLECENIE-OBIEKT' + Lekcja 2.5.: UYCIE MNONIKA BY WICEJ USUN - ** Wpisz dd by usunc ca lini. ** + ** Wpisanie liczby z operatorem powtarza go odpowiedni ilo razy. ** - Z powodu czstoci usuwania caych linii, projektanci Vim-a zdecydowali, e - bdzie atwiej wpisa dwa razy pod rzd d aby usun lini. + W wyej wspomnianej kombinacji operatora usuwania i ruchu podaj mnonik + przed ruchem by wicej usun: + d liczba ruch + + 1. Przenie kursor do pierwszego wyrazu KAPITALIKAMI w linii zaznaczonej --->. - 1. Przenie kursor do zdania poniej. - 2. Wpisz dd aby usunc wiersz. - 3. Teraz przenie si do czwartego wiersza. - 4. Wpisz 2dd (pamitaj liczba-polecenie-obiekt) aby usunc dwia wiersze. + 2. Wpisz 2dw aby usun dwa wyrazy KAPITALIKAMI. + + 3. Powtarzaj kroki 1. i 2. z innymi mnonikami aby usun kolejne wyrazy + KAPITALIKAMI jednym poleceniem - 1) Re s czerwone, - 2) Boto jest fajne, - 3) Fioki s niebieskie, - 4) Mam samochd, - 5) Zegar podaje czas, - 6) Cukier jest sodki, - 7) I ty te. +---> ta ASD WE linia QWE ASDF ZXCV FG wyrazw zostaa ERT FGH CF oczyszczona. + +UWAGA: Mnonik pomidzy operatorem d i ruchem dziaa podobnie do ruchu bez + operatora. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 2.5.: POLECENIE UNDO (cofnij) + Lekcja 2.6.: OPEROWANIE NA LINIACH + + + ** Wpisz dd aby usun ca lini. ** + + Z powodu czstoci usuwania caych linii, projektanci VI zdecydowali, e + bdzie atwiej wpisa dwa razy d aby usun lini. + + 1. Przenie kursor do zdania poniej. + 2. Wpisz dd aby usunc wiersz. + 3. Teraz przenie si do czwartego wiersza. + 4. Wpisz 2dd aby usunc dwia wiersze. + +---> 1) Re s czerwone, +---> 2) Boto jest fajne, +---> 3) Fioki s niebieskie, +---> 4) Mam samochd, +---> 5) Zegar podaje czas, +---> 6) Cukier jest sodki, +---> 7) I ty te. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.7.: POLECENIE UNDO (cofnij) ** Wcinij u aby cofn skutki ostatniego polecenia. @@ -241,7 +336,7 @@ UWAGA: Dla ciekawskich, wybieranie obiek 3. Teraz wcinij u aby cofn skutki ostatniego polecenia. 4. Tym razem popraw wszystkie bdy w linii uywajc polecenia x . 5. Teraz wcinij wielkie U aby przywrci lini do oryginalnego stanu. - 6. Teraz wcinij u kilka razy by cofn U i poprzednie polecenia. + 6. Teraz wcinij u kilka razy by cofn U i poprzednie polecenia. 7. Teraz wpsz CTRL-R (trzymaj rwnoczenie wcinite klawisze CTRL i R) kilka razy, by cofn cofnicia. @@ -254,62 +349,62 @@ UWAGA: Dla ciekawskich, wybieranie obiek ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 2. PODSUMOWANIE - 1. By usun znaki od kursora do koca wyrazu wpisz: dw - 2. By usun znaki od kursora do koca linii wpisz: d$ - + 1. By usun znaki od kursora do nastpnego wyrazu wpisz: dw + 2. By usun znaki od kursora do koca linii wpisz: d$ 3. By usun ca lini: dd - - 4. Format polecenia w trybie Normal: - - [liczba] polecenie obiekt LUB polecenie [liczba] obiekt - - Gdzie: - liczba - ile razy polecenie ma by wykonane - polecenie - to co trzeba zrobi (np. d dla usuwania) - obiekt - na czym polecenie bdzie wykonywane, takie jak w (wyraz), + 4. By powtrzy ruch poprzed go liczb: 2w + 5. Format polecenia zmiany to: + operator [liczba] ruch + gdzie: + operator - to co trzeba zrobi (np. d dla usuwania) + [liczba] - opcjonalne, ile razy powtrzy ruch + ruch - przenosi nad tekstem do operowania, takim jak w (wyraz), $ (do koca linii), etc. - 5. By cofn poprzednie polecenie, wpisz: u (mae u) + 6. By przej do pocztku linii uyj zera: 0 + 7. By cofn poprzednie polecenie, wpisz: u (mae u) By cofn wszystkie zmiany w linii wpisz: U (wielkie U) By cofn cofnicia wpisz: CTRL-R + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 3.1.: POLECENIE PUT (wstaw) + Lekcja 3.1.: POLECENIE PUT (wstaw) - ** Wpisz p by wstawi ostatnie usunicia po kursorze. ** + ** Wpisz p by wstawi ostatnie usunicia za kursorem. ** - 1. Przenie kursor do pierwszej linii w zestawie poniej. + 1. Przenie kursor do pierwszej linii ---> poniej. - 2. Wpisz dd aby usun lini i przechowa j w buforze Vim-a. + 2. Wpisz dd aby usun lini i przechowa j w rejestrze Vim-a. - 3. Przenie kursor do linii POWYEJ tej gdzie usunita linia powinna + 3. Przenie kursor do linii c), POWYEJ tej gdzie usunita linia powinna si znajdowa. - 4. W trybie Normal, wcinij p by wstawi lini. + 4. Wcinij p by wstawi lini poniej kursora. 5. Powtaj kroki 2. do 4. a znajd si w odpowiednim porzdku. - d) Jak dwa anioki. - b) Na dole fioki, - c) A my si kochamy, - a) Na grze re, +---> d) Jak dwa anioki. +---> b) Na dole fioki, +---> c) A my si kochamy, +---> a) Na grze re, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 3.2.: POLECENIE REPLACE (zastp) - ** Wpisz r a nastpnie znak by zastpi znak pod kursorem. ** + ** Wpisz rx aby zastpi znak pod kursorem na x . ** 1. Przenie kursor do pierwszej linii poniej oznaczonej ---> 2. Ustaw kursor na pierwszym bdzie. - 3. Wpisz r a potem znak jaki powinien zastpi bdny. + 3. Wpisz r a potem znak jaki powinien go zastpi. - 4. Powtarzaj kroki 2. i 3. dopki pierwsza linia nie bdzie poprawna. + 4. Powtarzaj kroki 2. i 3. dopki pierwsza linia nie bdzie taka jak druga. ---> Kjedy ten wiersz bi wstkiwany kto wcizn per zych klawirzy! ---> Kiedy ten wiersz by wstukiwany kto wcisn par zych klawiszy! @@ -321,18 +416,17 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 3.3.: POLECENIE CHANGE (zmie) + Lekcja 3.3.: OPERATOR CHANGE (zmie) - ** By zmieni cae sowo lub jego cz wpisz cw (change word). ** + ** By zmieni do koca wyrazu wpisz ce . ** 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. 2. Umie kursor na u w lunos. - 3. Wpisz cw i popraw wyraz (w tym wypadku wstaw 'inia'). + 3. Wpisz ce i popraw wyraz (w tym wypadku wstaw inia ). - 4. Wcinij i przejd do nastpnego bdu (pierwszy znak, ktry ma - ulec zmianie). + 4. Wcinij i przejd do nastpnej planowanej zmiany. 5. Powtarzaj kroki 3. i 4. dopki pierwsze zdanie nie bdzie takie same jak drugie. @@ -340,20 +434,21 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. ---> Ta lunos ma pire sw, ktre tina zbnic uifajonc pcmazu zmie. ---> Ta linia ma par sw, ktre trzeba zmieni uywajc polecenia zmie. - Zauwa, e cw nie tylko zamienia wyraz, ale take zmienia tryb na + Zauwa, e ce nie tylko zamienia wyraz, ale take zmienia tryb na Insert (wprowadzanie). + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 3.4.: WICEJ ZMIAN UYWAJC c - ** Polecenie change uywa takich samych obiektw jak delete. ** + ** Polecenie change uywa takich samych ruchw jak delete. ** - 1. Polecenie change dziaa tak samo jak delete. Format wyglda tak: + 1. Operator change dziaa tak samo jak delete. Format wyglda tak: - [liczba] c obiekt LUB c [liczba] obiekt + c [liczba] ruch - 2. Obiekty s take takie same, np.: w (wyraz), $ (koniec linii), etc. + 2. Ruchy s take takie same, np.: w (wyraz), $ (koniec linii), etc. 3. Przenie si do pierwszej linii poniej oznaczonej ---> @@ -364,7 +459,7 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. ---> Koniec tego wiersza musi by poprawiony aby wygldal tak jak drugi. ---> Koniec tego wiersza musi by poprawiony uywajc polecenia c$ . - +UWAGA: Moesz uywa aby poprawia bdy w czasie pisania. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 3. PODSUMOWANIE @@ -377,69 +472,69 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. 2. By zamieni znak pod kursorem wcinij r a potem znak, ktry ma zastpi oryginalny. - 3. Polecenie change pozwala Ci na zastpienie wyszczeglnionego obiektu - od kursora do koca obiektu. Np. wpisz cw aby zamieni tekst od - kursora do koca wyrazu, c$ aby zmieni tekst do koca linii. + 3. Operator change pozwala Ci na zastpienie od kursora do miejsca gdzie + zabraby ci ruch. Np. wpisz ce aby zamieni tekst od kursora do koca + wyrazu, c$ aby zmieni tekst do koca linii. 4. Format do polecenia change (zmie): - [liczba] c obiekt LUB c [liczba] obiekt + c [liczba] obiekt Teraz przejd do nastpnej lekcji. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 4.1.: LOKALIZACJA ORAZ STATUS PLIKU + Lekcja 4.1.: POOENIE KURSORA ORAZ STATUS PLIKU ** Nacinij CTRL-G aby zobaczy swoje pooenie w pliku i status - pliku. Nacinij SHIFT-G aby przej do linii w pliku. ** + pliku. Nacinij G aby przej do linii w pliku. ** UWAGA: Przeczytaj ca lekcj zanim wykonasz jakie polecenia!!! - 1. Przytrzymaj klawisz CTRL i wcinij g . Na dole strony pojawi si pasek - statusu z nazw pliku i numerem linii, w ktrej jeste. Zapamitaj numer - linii dla potrzeb kroku 3. + 1. Przytrzymaj klawisz CTRL i wcinij g . Uywamy notacji CTRL-G. + Na dole strony pojawi si pasek statusu z nazw pliku i pozycj w pliku. + Zapamitaj numer linii dla potrzeb kroku 3. - 2. Wcinij SHIFT-G aby przej na koniec pliku. +UWAGA: Moesz te zobaczy pozycj kursora w prawym, dolnym rogu ekranu. + Dzieje si tak kiedy ustawiona jest opcja 'ruler' (wyjanione w lekcji 6.). - 3. Wpisz numer linii, w ktrej bye a potem SHIFT-G. To przeniesie Ci - z powrotem do linii, w ktrej bye kiedy wcisne CTRL-G (kiedy - wpisujesz numery NIE pojawiaj si one na ekranie). + 2. Wcinij G aby przej na koniec pliku. + Wcinij gg aby przej do pocztku pliku. + + 3. Wpisz numer linii, w ktrej bye a potem G . To przeniesie ci + z powrotem do linii, w ktrej bye kiedy wcisne CTRL-G. 4. Jeli czujesz si wystarczajco pewnie, wykonaj kroki 1-3. - - - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 4.2.: POLECENIE SZUKAJ - ** Wpisz / a nastpnie wyraenie aby je znale. ** + ** Wpisz / a nastpnie wyraenie aby je znale. ** 1. W trybie Normal wpisz / . Zauwa, e znak ten, oraz kursor pojawi - si na dole ekranu tak samo jak polecenie : . + si na dole ekranu tak samo jak polecenie : . 2. Teraz wpisz bond . To jest sowo, ktrego chcesz szuka. 3. By szuka tej samej frazy ponownie, po prostu wcinij n . - Aby szuka tej frazy w przeciwnym, kierunku wcinij SHIFT-N. + Aby szuka tej frazy w przeciwnym, kierunku wcinij N . 4. Jeli chcesz szuka frazy do tyu, uyj polecenia ? zamiast / . ----> Kiedy polecenie 'szukaj' osignie koniec pliku, przeszukiwanie - zacznie si od pocztku pliku. + 5. Aby wrci gdzie bye wcinij CTRL-O. Powtarzaj by wrci dalej. CTRL-I + idzie do przodu. - 'bond' to nie jest metoda by przeliterowa bd; 'bond' to bd. - - +UWAGA: 'bond' to nie jest metoda by przeliterowa bd; 'bond' to bd. +UWAGA: Kiedy szukanie osignie koniec pliku bdzie kontynuowao od pocztku +o ile opcja 'wrapscan' nie zostaa przestawiona. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 4.3.: W POSZUKIWANIU PARUJCYCH NAWIASW - ** Wpisz % by znale pasujcy ),], lub } . ** + ** Wpisz % by znale pasujcy ),], lub } . ** 1. Umie kursor na ktrym z (, [, lub { w linii poniej oznaczonej --->. @@ -449,6 +544,8 @@ UWAGA: Pamitaj by uczy si wiczc, a nie pamiciowo. 4. Wcinij % aby przenie kursor z powrotem do parujcego nawiasu. + 5. Przenie kursor do innego (,),[,],{ lub } i zobacz co robi % . + ---> To ( jest linia testowa z (, [, ] i {, } . )) UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu @@ -456,10 +553,8 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu - - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 4.4.: INNA METODA POPRAWIANIA BDW + Lekcja 4.4.: POLECENIE SUBSTITUTE (zamiana) ** Wpisz :s/stary/nowy/g aby zamieni 'stary' na 'nowy'. ** @@ -469,41 +564,41 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu 2. Wpisz :s/czaas/czas . Zauwa, e to polecenie zmienia tylko pierwsze wystpienie 'czaas' w linii. - 3. Teraz wpisz :s/czaas/czas/g oznacza zamian (substytucj) - globalnie w caej linii. Zmienia wszystkie wystpienia w linii. + 3. Teraz wpisz :s/czaas/czas/g . Dodane g oznacza zamian (substytucj) + globalnie w caej linii. Zmienia wszystkie wystpienia 'czaas' w linii. ---> Najlepszy czaas na zobaczenie najadniejszych kwiatw to czaas wiosny. 4. Aby zmieni wszystkie wystpienia acucha znakw pomidzy dwoma liniami, - wpisz: :#,#s/stare/nowe/g gdzie #,# s numerami dwch linii. - Wpisz :%s/stare/nowe/g by zmieni wszystkie wystpienia w caym pliku. - - - + wpisz: :#,#s/stare/nowe/g gdzie #,# s numerami linii ograniczajcych + region gdzie ma nastpi zamiana. + wpisz :%s/stare/nowe/g by zmieni wszystkie wystpienia w caym pliku. + wpisz :%s/stare/nowe/gc by zmieni wszystkie wystpienia w caym + pliku, proszc o potwierdzenie za kadym razem ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 4. PODSUMOWANIE - - 1. CTRL-G pokae Twoj pozycj w pliku i status pliku. SHIFT-G przenosi - Ci do koca pliku. SHIFT-G poprzedzony liczb przenosi Ci do linii - o tym numerze. + 1. CTRL-G pokae Twoj pozycj w pliku i status pliku. SHIFT-G przenosi + ci do koca pliku. + G przenosi do koca pliku. + liczba G przenosi do linii [liczba]. + gg przenosi do pierwszej linii. 2. Wpisanie / a nastpnie acucha znakw szuka acucha DO PRZODU. Wpisanie ? a nastpnie acucha znakw szuka acucha DO TYU. Po wyszukiwaniu wcinij n by znale nastpne wystpienie szukanej - frazy tym samym kierunku lub Shift-N by szuka w kierunku przeciwnym. + frazy tym samym kierunku lub N by szuka w kierunku przeciwnym. + CTRL-O przenosi do starszych pozycji, CTRL-I do nowszych. 3. Wpisanie % gdy kursor znajduje si na (,),[,],{, lub } lokalizuje parujcy znak. - 4. By zamieni pierwszy stary na nowy w linii wpisz :s/stary/nowy - By zamieni wszystkie stary na nowy w linii wpisz :s/stary/nowy/g - By zamieni frazy pomidzy dwoma liniami # wpisz :#,#s/stary/nowy/g - By zamieni wszystkie wystpienia w pliku wpisz :%s/stary/nowy/g + 4. By zamieni pierwszy stary na nowy w linii wpisz :s/stary/nowy + By zamieni wszystkie stary na nowy w linii wpisz :s/stary/nowy/g + By zamieni frazy pomidzy dwoma liniami # wpisz :#,#s/stary/nowy/g + By zamieni wszystkie wystpienia w pliku wpisz :%s/stary/nowy/g By Vim prosi Ci o potwierdzienie dodaj 'c' :%s/stary/nowy/gc - - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 5.1.: JAK WYKONA POLECENIA ZEWNTRZNE @@ -518,11 +613,11 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu 3. Jako przykad wpisz ls za ! a nastpnie wcinij . To polecenie pokae spis plikw w Twoim katalogu, tak jakby by przy znaku zachty - powoki. Moesz te uy :!dir jeli ls nie dziaa. + powoki. Moesz te uy :!dir jeli ls nie dziaa. ----> Uwaga: W ten sposb mona wykona wszystkie polecenia powoki. ----> Uwaga: Wszystkie polecenia : musz by zakoczone . - +Uwaga: W ten sposb mona wykona wszystkie polecenia powoki. +Uwaga: Wszystkie polecenia : musz by zakoczone . + Od tego momentu nie zawsze bdziemy o tym wspomina. @@ -531,9 +626,9 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu Lekcja 5.2.: WICEJ O ZAPISYWANIU PLIKW - ** By zachowa zmiany w pliku wpisz :w NAZWA_PLIKU . ** + ** By zachowa zmiany w tekci wpisz :w NAZWA_PLIKU . ** - 1. Wpisz :!dir lub :!ls by zobaczy spis plikw w katalogu. + 1. Wpisz :!dir lub :!ls by zobaczy spis plikw w katalogu. Ju wiesz, e musisz wcisn po tym. 2. Wybierz nazw pliku jaka jeszcze nie istnieje, np. TEST. @@ -541,63 +636,63 @@ UWAGA: Ta funkcja jest bardzo uyteczna w debuggowaniu programu 3. Teraz wpisz: :w TEST (gdzie TEST jest nazw pliku jak wybrae.) 4. To polecenie zapamita cay plik (Vim Tutor) pod nazw TEST. - By to sprawdzi wpisz :!dir , eby znowu zobaczy list plikw. + By to sprawdzi wpisz :!dir lub :!ls , eby znowu zobaczy list plikw. ----> Zauwa, e gdyby teraz wyszed z Vim-a, a nastpnie wszed ponownie - komend vim TEST , plik byby dokadn kopi tutoriala kiedy go - zapisywae. +Uwaga: Zauwa, e gdyby teraz wyszed z Vim-a, a nastpnie wszed ponownie + komend vim TEST , plik byby dokadn kopi tutoriala kiedy go + zapisywae. 5. Teraz usu plik wpisujc: :!rm TEST ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 5.3.: SELEKTYWNE POLECENIE WRITE (zapisz) + Lekcja 5.3.: WYBRANIE TEKSTU DO ZAPISU - ** By zachowa cz pliku wpisz :#,# w NAZWA_PLIKU ** + ** By zachowa cz pliku wpisz v ruch :w NAZWA_PLIKU ** + + 1. Przenie kursor do tego wiersza. - 1. Jeszcze raz wpisz :!dir lub :!ls by uzyska list plikw - w katalogu i wybierz odpowiedni nazw tak jak TEST. + 2. Wcinij v i przenie kursor do punktu 5. Zauwa, e tekst zosta + podwietlony. - 2. Przenie kursor na gre tej strony i wcinij CTRL-G by uzyska - numer linii. ZAPAMITAJ T LICZB! + 3. Wcinij znak : . Na dole ekranu pojawi si :'<,'> . - 3. Teraz przenie si na d strony i wpisz CTRL-G znowu. ZAPAMITAJ - NUMER TAKE TEJ LINII! + 4. Wpisz w TEST , gdzie TEST to nazwa pliku, ktry jeszcze nie istnieje. + Upewnij si, e widzisz :'<,'>w TEST zanim wciniesz Enter. - 4. By zachowa JEDYNIE cz pliku wpisz :#,# w TEST gdzie #,# to - dwie liczby jakie zapamitae (gra, d ekranu), a TEST to nazwa - Twojego pliku. + 5. Vim zapisze wybrane linie do pliku TEST. Uyj :!dir lub :!ls , eby to + zobaczy. Jeszcze go nie usuwaj! Uyjemy go w nastpnej lekcji. - 5. Ponownie sprawd czy ten plik tam jest ( :!dir ), ale NIE usuwaj go. - - +UWAGA: Wcinicie v zaczyna tryb Wizualny. Moesz porusza kursorem by + zmieni rozmiary zaznaczenia. Moesz te uy operatora by zrobi co + z tekstem. Na przykad d usuwa tekst. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 5.4.: WSTAWIANIE I CZENIE PLIKW - ** By wstawi zawarto pliku wpisz :r NAZWA_PLIKU ** + ** By wstawi zawarto pliku wpisz :r NAZWA_PLIKU ** - 1. Wpisz :!dir by si upewni, ze Twj plik TEST zosta poprawnie - zapamitany. + 1. Umie kursor tu powyej tej linii. - 2. Umie kursor na grze strony. - -UWAGA: Po wykonaniu kroku 3. ponownie zobaczysz Lekcj 5.3. Potem przejd +UWAGA: Po wykonaniu kroku 2. zobaczysz tekst z Lekcji 5.3. Potem przejd do DOU by zobaczy ponownie t lekcj. - 3. Teraz wczytaj plik TEST uywajc polecenia :r TEST , gdzie TEST + 2. Teraz wczytaj plik TEST uywajc polecenia :r TEST , gdzie TEST jest nazw pliku. + Wczytany plik jest umieszczony poniej linii z kursorem. -UWAGA: Plik, ktry wczytujesz jest wstawiany tam gdzie by kursor. + 3. By sprawdzi czy plik zosta wczytany cofnij kursor i zobacz, e + teraz s dwie kopie Lekcji 5.3., orygina i kopia z pliku. - 4. By sprawdzi czy plik zosta wczytany cofnij kursor i zobacz, e - teraz s dwie kopie Lekcji 5.3., orygina i kopia z pliku. +UWAGA: Moesz te wczyta wyjcie zewntrznego polecenia. Na przykad + :r !ls wczytuje wyjcie polecenia ls i umieszcza je pod kursorem. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - LEKCJA 5. PODSUMOWANIE + LEKCJA 5. PODSUMOWANIE 1. :!polecenie wykonuje polecenie zewntrzne. @@ -610,12 +705,12 @@ UWAGA: Plik, ktry wczytujesz jest wstawiany tam gdzie by kursor. 2. :w NAZWA_PLIKU zapisuje obecny plik Vim-a na dysk z nazw NAZWA_PLIKU. - 3. :#,#w NAZWA_PLIKU zapisuje linie od # do # w pliku NAZWA_PLIKU. + 3. v ruch :w NAZWA_PLIKU zapisuje Wizualnie wybrane linie do NAZWA_PLIKU. 4. :r NAZWA_PLIKU wczytuje z dysku plik NAZWA_PLIKU i wstawia go do - biecego pliku po kursorze. + biecego pliku poniej kursora. - + 5. :r !dir wczytuje wyjcie polecenia dir i umieszcza je poniej kursora. @@ -623,7 +718,7 @@ UWAGA: Plik, ktry wczytujesz jest wstawiany tam gdzie by kursor. Lekcja 6.1.: POLECENIE OPEN (otwrz) - ** Wpisz o by otworzy lini poniej kursora i przenie si do + ** Wpisz o by otworzy lini poniej kursora i przenie si do trybu Insert (wprowadzanie). ** 1. Przenie kursor do linii poniej oznaczonej --->. @@ -631,16 +726,16 @@ UWAGA: Plik, ktry wczytujesz jest wstawiany tam gdzie by kursor. 2. Wpisz o (mae) by otworzy lini PONIEJ kursora i przenie si do trybu Insert (wprowadzanie). - 3. Teraz przepisz lini oznaczon ---> i wcinij by wyj - z trybu Insert (wprowadzanie). + 3. Wpisz troch tekstu i wcinij by wyj z trybu Insert (wprowadzanie). ----> Po wciniciu o kursor znajdzie si w otwartej linii w trybie - Insert (wprowadzanie). +---> Po wciniciu o kursor znajdzie si w otwartej linii w trybie Insert. 4. By otworzy lini POWYEJ kursora wcinij wielkie O zamiast maego o . Wyprbuj to na linii poniej. - Otwrz lini powyej wciskajc SHIFT-O gdy kursor bdzie na tej linii. +---> Otwrz lini powyej wciskajc SHIFT-O gdy kursor bdzie na tej linii. + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 6.2.: POLECENIE APPEND (dodaj) @@ -648,137 +743,203 @@ UWAGA: Plik, ktry wczytujesz jest wstawiany tam gdzie by kursor. ** Wpisz a by doda tekst ZA kursorem. ** - 1. Przenie kursor do koca pierwszej linii poniej oznaczonej ---> - Zrb to wciskajc $ w trybie Normal. + 1. Przenie kursor do pocztku pierwszej linii poniej oznaczonej ---> - 2. Wpisz a (mae) aby doda tekst ZA znakiem pod kursorem. - Wielkie A dodaje tekst na kocu linii. + 2. Wciskaj e dopki kursor nie bdzie na kocu li . + + 3. Wpisz a (mae) aby doda tekst ZA znakiem pod kursorem. -Uwaga: To oszczdza wpisania: ostatni znak ( $ ), i , tekst do dodania, - , strzaka w prawo i ostatecznie x , tylko po to by doda - tekst na kocu linii. + 4. Dokocz wyraz tak jak w linii poniej. Wcinij aby opuci tryb + Insert. - 3. Teraz dokocz pierwsz lini. Zauwa take, e append (dodaj) - dziaa tak samo jak tryb Insert (wprowadzanie) z wyjtkiem tego gdzie - tekst jest wstawiany. + 5. Uyj e by przej do kolejnego niedokoczonego wyraze i powtarzaj kroki + 3. i 4. ----> Ta linia pozwoli Ci wiczy +---> Ta li poz Ci wi dodaw teks do ko lin ---> Ta linia pozwoli Ci wiczy dodawanie tekstu do koca linii. +Uwaga: a , i and A prowadz do trybu Insert, jedyn rnic jest miejsce + gdzie nowe znaki bd dodawane. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lekcja 6.3.: INNA WERSJA REPLACE (zamiana) - ** Wpisz wielkie R by zamieni wicej ni jeden znak. ** + ** Wpisz wielkie R by zamieni wicej ni jeden znak. ** + + 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. Przenie + kursor do pierwszego xxx . - 1. Przenie kursor do pierwszej linii poniej oznaczonej --->. + 2. Wcinij R i wpisz numer poniej w drugiej linii, tak, e zastpi on + xxx. - 2. Umie kursor na pocztku pierwszego wyrazu, ktry rzni si od - drugiej linii oznaczonej ---> (wyraz 'ostatni'). + 3. Wcinij by opuci tryb Replace. Zauwa, e reszta linii pozostaje + niezmieniona. - 3. Teraz wpisz R i zamie reszt tekstu w pierwszej linii przez - nadpisanie nad starym tekstem tak aby pierwsza linia brzmiaa tak samo - jak druga. + 5. Powtarzaj kroki by wymieni wszystkie xxx. + +---> Dodanie 123 do xxx daje xxx. +---> Dodanie 123 do 456 daje 579. ----> To make the first line the same as the last on this page use the keys. ----> To make the first line the same as the second, type R and the new text. +UWAGA: Tryb Replace jest jak tryb Insert, ale kady znak usuwa istniejcy + znak. - 4. Zauwa, e kiedy wciniesz aby wyj niezmieniony tekst - pozostaje. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 6.4.: KOPIOWANIE I WKLEJANIE TEKSTU + ** uyj operatora y aby skopiowa tekst i p aby go wklei ** + + 1. Przejd do linii oznaczonej ---> i umiec kursor za "a)". + + 2. Wejd w tryb Visual v i przenie kursor na pocztek "pierwszy". + + 3. Wcinij y aby yankowa (kopiowa) podwietlony tekst. + + 4. Przenie kursor do koca nastpnej linii: j$ + + 5. Wcinij p aby wpakowa (paste) tekst. Dodaj: a drugi . + + 6. Uyj trybu Visual aby wybra " element.", yankuj go y , przejd do koca + nastpnej linii j$ i upakuj tam tekst z p . + +---> a) to jest pierwszy element. + b) +Uwaga: moesz uy y jako operatora; yw kopiuje jeden wyraz. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lekcja 6.4.: USTAWIANIE OPCJI + Lekcja 6.5.: USTAWIANIE OPCJI ** Ustawianie opcji tak by szukaj lub substytucja ignoroway wielko liter ** - 1. Szukaj 'ignore' wpisujc (w trybie Normal): - /ignore + 1. Szukaj 'ignore' wpisujc: /ignore Powtrz szukanie kilka razy naciskajc klawisz n . 2. Ustaw opcj 'ic' (Ignore case -- ignoruj wielko liter) poprzez wpisanie: :set ic - 3. Teraz szukaj 'ignore' ponownie wciskujc: n - Powtrz szukanie kilka razy naciskajc klawisz n . + 3. Teraz szukaj 'ignore' ponownie wciskujc: n + Zauwa, e Ignore i IGNORE take s teraz znalezione. - 4. Ustaw opcje 'hlsearch' i 'incsearch': - :set hls is + 4. Ustaw opcje 'hlsearch' i 'incsearch': :set hls is 5. Teraz wprowad polecenie szukaj ponownie i zobacz co si zdarzy: - /ignore + /ignore + 6. Aby wyczy ignorowanie wielkoci liter: :set noic +Uwaga: Aby usun podwietlanie dopasowa wpisz: :nohlsearch +Uwaga: Aby ignorowa wielko liter dla jednego wyszukiwania: /ignore\c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEKCJA 6. PODSUMOWANIE - 1. Wpisanie o otwiera lini PONIEJ kursora i umieszcza kursor - w otwartej linii w trybie Insert (wprowadzanie). - Wpisanie wielkiego O otwiera lini POWYEJ linii, w ktrej - znajduje si kursor. - + 1. Wpisanie o otwiera lini PONIEJ kursora. + Wpisanie wielkiego O otwiera lini POWYEJ kursora. 2. Wpisz a by wstawi tekst ZA znakiem na, ktrym jest kursor. - Wpisanie wielkiego A automatycznie dodaje tekst na kocu linii. - - 3. Wpisanie wielkiego R wprowadza w tryb Replace (zamiana) dopki + Wpisanie wielkiego A dodaje tekst na kocu linii. + 3. Polecenie e przenosi do koca wyrazu. + 4. Operato y yankuje (kopiuje) tekst, p pakuje (wkleja, paste) go. + 5. Wpisanie wielkiego R wprowadza w tryb Replace (zamiana) dopki nie zostanie wcinity . - - 4. Wpisanie ":set xxx" ustawia opcj "xxx". - - + 6. Wpisanie ":set xxx" ustawia opcj "xxx". Nietkre opcje: + 'ic' 'ignorecase' ignoruj wielko znakw + 'is' 'incsearch' poka czciowe dopasowania + 'hls' 'hlsearch' podwietl wszystkie dopasowania + Moesz uy zarwno dugiej jak i krtkiej formy. + 7. Dodaj "no" aby wyczy opcj: :set noic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - LEKCJA 7. POLECENIA POMOCY ON-LINE - + LEKCJA 7.1. JAK UZYSKA POMOC ** Uycie systemu pomocy on-line ** Vim posiada bardzo dobry system pomocy on-line. By zacz sprbuj jednej z trzech moliwoci: - - wcinij klawisz (jeli takowy posiadasz) - wcinij klawisz (jeli takowy posiadasz) - wpisz :help - Wpisz :q by zamknc okno pomocy. + Przeczytaj tekst w oknie pomocy aby dowiedzie si jak dziaa pomoc. + wpisz CTRL-W CTRL-W aby przeskoczy z jednego okna do innego + wpisz :q aby zamkn okno pomocy. Moesz te znale pomoc na kady temat podajc argument polecenia ":help". Sprbuj tych (nie zapomnij wcisn ): :help w - :help c_ ** + + 1. Upewnij si, e Vim nie jest w trybie kompatybilnoci: :set nocp + + 2. Zerknij jakie pliki s w biecm katalogu: :!ls lub :!dir + + 3. Wpisz pocztek polecenia: :e + + 4. Wcinij CTRL-D i Vim pokae list polece jakie zaczynaj si na "e". + + 5. Wcinij i Vim uzupeni polecenie do ":edit". + + 6. Dodaj spacj i zacznij wpisywa nazw istniejcego pliku: :edit FIL + + 7. Wcinij . Vim uzupeni nazw (jeli jest niepowtarzalna). + +UWAGA: Uzupenianie dziaa dla wielu polece. Sprbuj wcisn CTRL-D i . + Uyteczne zwaszcza przy :help . +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 7. PODSUMOWANIE + + + 1. Wpisz :help lub wcinij lub aby otworzy okno pomocy. + + 2. Wpisz :help cmd aby uzyska pomoc o cmd . + + 3. Wpisz CTRL-W CTRL-W aby przeskoczy do innego okna. + + 4. Wpisz :q aby zamkn okno pomocy. + + 5. Utwrz plik startowy vimrc aby zachowa wybrane ustawienia. + + 6. Po poleceniu : , wcinij CTRL-D aby zobaczy moliwe uzupenienia. + Wcinij aby uy jednego z nich. + + + + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -826,5 +987,5 @@ Uwaga: To oszczdza wpisania: ostatni znak ( $ ), i , tekst do dodania, Przetumaczone przez Mikoaja Machowskiego, Sierpie 2001, rev. Marzec 2002 + 2nd rev. Wrzesie 2004 Wszelkie uwagi prosz kierowa na: mikmach@wp.pl - diff --git a/runtime/tutor/tutor.pl.utf-8 b/runtime/tutor/tutor.pl.utf-8 new file mode 100644 --- /dev/null +++ b/runtime/tutor/tutor.pl.utf-8 @@ -0,0 +1,991 @@ +=============================================================================== += W i t a j w t u t o r i a l u V I M - a - Wersja 1.7. = +=============================================================================== + + Vim to potężny edytor, który posiada wiele poleceń, zbyt dużo by + wyjaśnić je wszystkie w tym tutorialu. Ten przewodnik ma nauczyć + Cię posługiwać się wystarczająco wieloma komendami byś mógł łatwo + używać Vim-a jako edytora ogólnego przeznaczenia. + + Czas potrzebny na ukończenie tutoriala to 25 do 30 minut i zależy + od tego jak wiele czasu spędzisz na eksperymentowaniu. + + UWAGA: + Polecenia wykonywane w czasie lekcji zmodyfikują tekst. Zrób + wcześniej kopię tego pliku do ćwiczeń (jeśli zacząłeś komendą + "vimtutor" to już pracujesz na kopii). + + Ważne jest, byś pamiętał, że przewodnik ten został zaprojektowany do + nauki poprzez ćwiczenia. To oznacza, że musisz wykonywać polecenia + by nauczyć się ich prawidłowo. Jeśli będziesz jedynie czytał tekst + szybko zapomnisz wiele poleceń! + + Teraz upewnij się, że nie masz wciśniętego CapsLocka i wciskaj j + tak długo dopóki Lekcja 1.1. nie wypełni całkowicie ekranu. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.1.: PORUSZANIE SIĘ KURSOREM + + ** By wykonać ruch kursorem, wciśnij h, j, k, l jak pokazano. ** + + ^ + k Wskazówka: h jest po lewej + < h l > l jest po prawej + j j wygląda jak strzałka w dół + v + 1. Poruszaj kursorem dopóki nie będziesz pewien, że pamiętasz polecenia. + + 2. Trzymaj j tak długo aż będzie się powtarzał. + Teraz wiesz jak dojść do następnej lekcji. + + 3. Używając strzałki w dół przejdź do następnej lekcji. + +Uwaga: Jeśli nie jesteś pewien czegoś co wpisałeś, wciśnij by wrócić do + trybu Normal. Wtedy powtórz polecenie. + +Uwaga: Klawisze kursora także powinny działać, ale używając hjkl będziesz + w stanie poruszać się o wiele szybciej jak się tylko przyzwyczaisz. + Naprawdę! + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.2.: WYCHODZENIE Z VIM-a + + !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj całą lekcję.!! + + 1. Wciśnij (aby upewnić się, że jesteś w trybie Normal). + 2. Wpisz: :q!. + To spowoduje wyjście z edytora PORZUCAJĄC wszelkie zmiany jakie + zdążyłeś zrobić. Jeśli chcesz zapamiętać zmiany i wyjść + wpisz: :wq + + 3. Kiedy widzisz znak zachęty powłoki wpisz komendę, żeby wrócić + do tutoriala. Czyli: vimtutor + + 4. Jeśli chcesz zapamiętać polecenia, wykonaj kroki 1. do 3. aby + wyjść i wrócić do edytora. + +UWAGA: :q! porzuca wszelkie zmiany jakie zrobiłeś. W następnych +lekcjach dowiesz się jak je zapamiętywać. + + 5. Przenieś kursor do lekcji 1.3. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.3.: EDYCJA TEKSTU - KASOWANIE + + ** Wciśnij x aby usunąć znak pod kursorem. ** + + 1. Przenieś kursor do linii poniżej oznaczonej --->. + + 2. By poprawić błędy, naprowadź kursor na znak do usunięcia. + + 3. Wciśnij x aby usunąć niechciany znak. + + 4. Powtarzaj kroki 2. do 4. dopóki zdanie nie jest poprawne. + +---> Kkrowa prrzeskoczyła prrzez ksiiężycc. + + 5. Teraz kiedy zdanie jest poprawione przejdź do Lekcji 1.4. + +UWAGA: Ucz się przez ćwiczenie, nie wkuwanie. + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.4.: EDYCJA TEKSTU - INSERT (wprowadzanie) + + + ** Wciśnij i aby wstawić tekst. ** + + 1. Przenieś kursor do pierwszej linii poniżej oznaczonej --->. + + 2. Aby poprawić pierwszy wiersz, ustaw kursor na pierwszym znaku PO tym + gdzie tekst ma być wstawiony. + + 3. Wciśnij i a następnie wpisz konieczne poprawki. + + 4. Po poprawieniu błędu wciśnij by wrócić do trybu Normal. + Powtarzaj kroki 2. do 4. aby poprawić całe zdanie. + +---> W tej brkje trochę . +---> W tej linii brakuje trochę tekstu. + + 5. Kiedy czujesz się swobodnie wstawiając tekst przejdź do + podsumowania poniżej. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.5.: EDYCJA TEKSTU - APPENDING (dodawanie) + + + ** Wciśnij A by dodać tekst. ** + + 1. Przenieś kursor do pierwszej linii poniżej oznaczonej --->. + Nie ma znaczenia, który to będzie znak. + + 2. Wciśnij A i wpisz odpowiednie dodatki. + + 3. Kiedy tekst został dodany, wciśnij i wróć do trybu Normalnego. + + 4. Przenieś kursor do drugiej linii oznaczonej ---> i powtórz kroki 2 i 3 + aby poprawić zdanie. + +---> Brakuje tu tro + Brakuje tu trochę tekstu. +---> Tu też trochę bra + Tu też trochę brakuje. + + 5. Kiedy już utrwaliłeś ćwiczenie przejdź do lekcji 1.6. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 1.6.: EDYCJA PLIKU + + + ** Użyj :wq aby zapisać plik i wyjść. ** + + !! UWAGA: zanim wykonasz jakiekolwiek polecenia przeczyaj całą lekcję !! + + 1. Zakończ tutorial tak jak w lekcji 1.2.: :q! + + 2. W powłoce wydaj polecenie: vim tutor + "vim" jest poleceniem uruchamiającym edytor Vimm. 'tutor' to nazwa pliku + jaki chcesz edytować. Użyj pliku jaki może zostać zmieniony. + + 3. Dodaj i usuń tekst tak jak się nauczyłeś w poprzednich lekcjach. + + 4. Zapisz plik ze zmianami w opuść Vima: :wq + + 5. Uruchom ponownie vimtutor i przejdź do podsumowania lekcji. + + 6. Po przeczytaniu wszystkich kroków i zrozumieniu ich: wykonaj je. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKCJA 1. PODSUMOWANIE + + 1. Poruszasz kursorem używając "strzałek" i klawiszy hjkl . + h (w lewo) j (w dół) k (do góry) l (w prawo) + + 2. By wejść do Vim-a (z powłoki) wpisz: + vim NAZWA_PLIKU + + 3. By wyjść z Vim-a wpisz: + :q! by usunąc wszystkie zmiany. + LUB: :wq by zmiany zachować. + + 4. By usunąć znak pod kursorem wciśnij: x + + 5. By wstawić tekst przed kursorem lub dodać: + i wpisz tekst wstawi przed kursorem + A wpisz tekst doda na końcu linii + +UWAGA: Wciśnięcie przeniesie Cię z powrotem do trybu Normal +lub odwoła niechciane lub częściowo wprowadzone polecenia. + +Teraz możemy kontynuować i przejść do Lekcji 2. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.1.: POLECENIE DELETE (usuwanie) + + + ** Wpisz dw by usunąc wyraz. ** + + 1. Wciśnij by upewnić się, że jesteś w trybie Normal. + + 2. Przenieś kursor do linii poniżej oznaczonej --->. + + 3. Przesuń kursor na początek wyrazu, które chcesz usunąć. + + 4. Wpisz dw by usunąc wyraz. + + UWAGA: Litera d pojawi się na dole ekranu. Vim czeka na wpisanie w . + Jeśli zobaczysz inny znak wpisałeś coś źle, wciśnij i zacznij + od początku. + +---> Jest tu parę papier wyrazów, które kamień nie należą do nożyce tego zdania. + + 5. Powtarzaj kroki 3. i 4. dopóki zdanie nie będzie poprawne, potem + przejdź do Lekcji 2.2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.2.: WIĘCEJ POLECEŃ USUWAJĄCYCH + + + ** Wpisz d$ aby usunąć tekst do końca linii. ** + + 1. Wciśnij aby się upewnić, że jesteś w trybie Normal. + + 2. Przenieś kursor do linii poniżej oznaczonej --->. + + 3. Przenieś kursor do końca poprawnego zdania (PO pierwszej . ). + + 4. Wpisz d$ aby usunąć resztę linii. + +---> Ktoś wpisał koniec tego zdania dwukrotnie. zdania dwukrotnie. + + + 5. Przejdź do Lekcji 2.3. by zrozumieć co się stało. + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.3.: O OPERATORACH I RUCHACH + + + Wiele poleceń zmieniających tekst są złożone z operatora i ruchu. + Format dla polecenia usuwającego z operatorem d jest taki: + + d ruch + + Gdzie: + d - operator usuwania. + ruch - na czym polecenie będzie wykonywane (lista poniżej). + + Krótka lista ruchów: + w - do początku następnego wyrazu WYŁĄCZAJĄC pierwszy znak. + e - do końca bieżącego wyrazu, WŁĄCZAJĄC ostatni znak. + $ - do końca linii, WŁĄCZAJĄC ostatni znak. + +W ten sposób wpisanie de usunie znaki od kursora do końca wyrazu. + +UWAGA: Wpisanie tylko ruchu w trybie Normal bez operatora przeniesie kursor + tak jak to określono. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.4.: UŻYCIE MNOŻNIKA DLA RUCHU + + + ** Wpisanie liczby przed ruchem powtarza ruch odpowiednią ilość razy. ** + + 1. Przenieś kursor na początek linii poniżej zaznaczonej --->. + + 2. Wpisz 2w aby przenieść kursor o dwa wyrazy do przodu. + + 3. Wpisz 3e aby przenieść kursor do końca trzeciego wyrazu w przód. + + 4. Wpisz 0 (zero) aby przenieść kursor do początku linii. + + 5. Powtórz kroki 2. i 3. z innymi liczbami. + + + ---> To jest zwykły wiersz z wyrazami po których możesz się poruszać. + + 6. Przejdź do lekcji 2.5. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.5.: UŻYCIE MNOŻNIKA BY WIĘCEJ USUNĄĆ + + + ** Wpisanie liczby z operatorem powtarza go odpowiednią ilość razy. ** + + W wyżej wspomnianej kombinacji operatora usuwania i ruchu podaj mnożnik + przed ruchem by więcej usunąć: + d liczba ruch + + 1. Przenieś kursor do pierwszego wyrazu KAPITALIKAMI w linii zaznaczonej --->. + + 2. Wpisz 2dw aby usunąć dwa wyrazy KAPITALIKAMI. + + 3. Powtarzaj kroki 1. i 2. z innymi mnożnikami aby usunąć kolejne wyrazy + KAPITALIKAMI jednym poleceniem + +---> ta ASD WE linia QWE ASDF ZXCV FG wyrazów została ERT FGH CF oczyszczona. + +UWAGA: Mnożnik pomiędzy operatorem d i ruchem działa podobnie do ruchu bez + operatora. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.6.: OPEROWANIE NA LINIACH + + + ** Wpisz dd aby usunąć całą linię. ** + + Z powodu częstości usuwania całych linii, projektanci VI zdecydowali, że + będzie łatwiej wpisać dwa razy d aby usunąć linię. + + 1. Przenieś kursor do zdania poniżej. + 2. Wpisz dd aby usunąc wiersz. + 3. Teraz przenieś się do czwartego wiersza. + 4. Wpisz 2dd aby usunąc dwia wiersze. + +---> 1) Róże są czerwone, +---> 2) Błoto jest fajne, +---> 3) Fiołki są niebieskie, +---> 4) Mam samochód, +---> 5) Zegar podaje czas, +---> 6) Cukier jest słodki, +---> 7) I ty też. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 2.7.: POLECENIE UNDO (cofnij) + + + ** Wciśnij u aby cofnąć skutki ostatniego polecenia. + U zaś, by cofnąć skutki dla całej linii. ** + + 1. Przenieś kursor do zdania poniżej oznaczonego ---> i umieść go na + pierwszym błędzie. + 2. Wpisz x aby usunąć pierwszy niechciany znak. + 3. Teraz wciśnij u aby cofnąć skutki ostatniego polecenia. + 4. Tym razem popraw wszystkie błędy w linii używając polecenia x . + 5. Teraz wciśnij wielkie U aby przywrócić linię do oryginalnego stanu. + 6. Teraz wciśnij u kilka razy by cofnąć U i poprzednie polecenia. + 7. Teraz wpsz CTRL-R (trzymaj równocześnie wciśnięte klawisze CTRL i R) + kilka razy, by cofnąć cofnięcia. + +---> Poopraw blędyyy w teej liniii i zaamiień je prrzez coofnij. + + 8. To są bardzo pożyteczne polecenia. + + Przejdź teraz do podsumowania Lekcji 2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKCJA 2. PODSUMOWANIE + + + 1. By usunąć znaki od kursora do następnego wyrazu wpisz: dw + 2. By usunąć znaki od kursora do końca linii wpisz: d$ + 3. By usunąć całą linię: dd + 4. By powtórzyć ruch poprzedź go liczbą: 2w + 5. Format polecenia zmiany to: + operator [liczba] ruch + gdzie: + operator - to co trzeba zrobić (np. d dla usuwania) + [liczba] - opcjonalne, ile razy powtórzyć ruch + ruch - przenosi nad tekstem do operowania, takim jak w (wyraz), + $ (do końca linii), etc. + + 6. By przejść do początku linii użyj zera: 0 + 7. By cofnąć poprzednie polecenie, wpisz: u (małe u) + By cofnąć wszystkie zmiany w linii wpisz: U (wielkie U) + By cofnąć cofnięcia wpisz: CTRL-R + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 3.1.: POLECENIE PUT (wstaw) + + + ** Wpisz p by wstawić ostatnie usunięcia za kursorem. ** + + 1. Przenieś kursor do pierwszej linii ---> poniżej. + + 2. Wpisz dd aby usunąć linię i przechować ją w rejestrze Vim-a. + + 3. Przenieś kursor do linii c), POWYŻEJ tej gdzie usunięta linia powinna + się znajdować. + + 4. Wciśnij p by wstawić linię poniżej kursora. + + 5. Powtaj kroki 2. do 4. aż znajdą się w odpowiednim porządku. + +---> d) Jak dwa aniołki. +---> b) Na dole fiołki, +---> c) A my się kochamy, +---> a) Na górze róże, + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 3.2.: POLECENIE REPLACE (zastąp) + + + ** Wpisz rx aby zastąpić znak pod kursorem na x . ** + + 1. Przenieś kursor do pierwszej linii poniżej oznaczonej ---> + + 2. Ustaw kursor na pierwszym błędzie. + + 3. Wpisz r a potem znak jaki powinien go zastąpić. + + 4. Powtarzaj kroki 2. i 3. dopóki pierwsza linia nie będzie taka jak druga. + +---> Kjedy ten wiersz bił wstókiwany ktoś wciznął perę złych klawirzy! +---> Kiedy ten wiersz był wstukiwany ktoś wcisnął parę złych klawiszy! + + 5. Teraz czas na Lekcję 3.3. + + +UWAGA: Pamiętaj by uczyć się ćwicząc, a nie pamięciowo. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 3.3.: OPERATOR CHANGE (zmień) + + ** By zmienić do końca wyrazu wpisz ce . ** + + 1. Przenieś kursor do pierwszej linii poniżej oznaczonej --->. + + 2. Umieść kursor na u w lunos. + + 3. Wpisz ce i popraw wyraz (w tym wypadku wstaw inia ). + + 4. Wciśnij i przejdź do następnej planowanej zmiany. + + 5. Powtarzaj kroki 3. i 4. dopóki pierwsze zdanie nie będzie takie same + jak drugie. + +---> Ta lunos ma pire słów, które tżina zbnic użifajonc pcmazu zmień. +---> Ta linia ma parę słów, które trzeba zmienić używając polecenia zmień. + + Zauważ, że ce nie tylko zamienia wyraz, ale także zmienia tryb na + Insert (wprowadzanie). + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 3.4.: WIĘCEJ ZMIAN UŻYWAJĄC c + + + ** Polecenie change używa takich samych ruchów jak delete. ** + + 1. Operator change działa tak samo jak delete. Format wygląda tak: + + c [liczba] ruch + + 2. Ruchy są także takie same, np.: w (wyraz), $ (koniec linii), etc. + + 3. Przenieś się do pierwszej linii poniżej oznaczonej ---> + + 4. Ustaw kursor na pierwszym błędzie. + + 5. Wpisz c$ , popraw koniec wiersza i wciśnij . + +---> Koniec tego wiersza musi być poprawiony aby wyglądal tak jak drugi. +---> Koniec tego wiersza musi być poprawiony używając polecenia c$ . + +UWAGA: Możesz używać aby poprawiać błędy w czasie pisania. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKCJA 3. PODSUMOWANIE + + + 1. Aby wstawić tekst, który został wcześniej usunięty wciśnij p . To + polecenie wstawia skasowany tekst PO kursorze (jeśli cała linia + została usunięta, zostanie ona umieszczona w linii poniżej kursora). + + 2. By zamienić znak pod kursorem wciśnij r a potem znak, który ma zastąpić + oryginalny. + + 3. Operator change pozwala Ci na zastąpienie od kursora do miejsca gdzie + zabrałby cię ruch. Np. wpisz ce aby zamienić tekst od kursora do końca + wyrazu, c$ aby zmienić tekst do końca linii. + + 4. Format do polecenia change (zmień): + + c [liczba] obiekt + + Teraz przejdź do następnej lekcji. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 4.1.: POŁOŻENIE KURSORA ORAZ STATUS PLIKU + + ** Naciśnij CTRL-G aby zobaczyć swoje położenie w pliku i status + pliku. Naciśnij G aby przejść do linii w pliku. ** + + UWAGA: Przeczytaj całą lekcję zanim wykonasz jakieś polecenia!!! + + 1. Przytrzymaj klawisz CTRL i wciśnij g . Używamy notacji CTRL-G. + Na dole strony pojawi się pasek statusu z nazwą pliku i pozycją w pliku. + Zapamiętaj numer linii dla potrzeb kroku 3. + +UWAGA: Możesz też zobaczyć pozycję kursora w prawym, dolnym rogu ekranu. + Dzieje się tak kiedy ustawiona jest opcja 'ruler' (wyjaśnione w lekcji 6.). + + 2. Wciśnij G aby przejść na koniec pliku. + Wciśnij gg aby przejść do początku pliku. + + 3. Wpisz numer linii, w której byłeś a potem G . To przeniesie cię + z powrotem do linii, w której byłeś kiedy wcisnąłeś CTRL-G. + + 4. Jeśli czujesz się wystarczająco pewnie, wykonaj kroki 1-3. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 4.2.: POLECENIE SZUKAJ + + + ** Wpisz / a następnie wyrażenie aby je znaleźć. ** + + 1. W trybie Normal wpisz / . Zauważ, że znak ten, oraz kursor pojawią + się na dole ekranu tak samo jak polecenie : . + + 2. Teraz wpisz błond . To jest słowo, którego chcesz szukać. + + 3. By szukać tej samej frazy ponownie, po prostu wciśnij n . + Aby szukać tej frazy w przeciwnym, kierunku wciśnij N . + + 4. Jeśli chcesz szukać frazy do tyłu, użyj polecenia ? zamiast / . + + 5. Aby wrócić gdzie byłeś wciśnij CTRL-O. Powtarzaj by wrócić dalej. CTRL-I + idzie do przodu. + +UWAGA: 'błond' to nie jest metoda by przeliterować błąd; 'błond' to błąd. +UWAGA: Kiedy szukanie osiągnie koniec pliku będzie kontynuowało od początku +o ile opcja 'wrapscan' nie została przestawiona. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 4.3.: W POSZUKIWANIU PARUJĄCYCH NAWIASÓW + + + ** Wpisz % by znaleźć pasujący ),], lub } . ** + + 1. Umieść kursor na którymś z (, [, lub { w linii poniżej oznaczonej --->. + + 2. Teraz wpisz znak % . + + 3. Kursor powinien się znaleźć na parującym nawiasie. + + 4. Wciśnij % aby przenieść kursor z powrotem do parującego nawiasu. + + 5. Przenieś kursor do innego (,),[,],{ lub } i zobacz co robi % . + +---> To ( jest linia testowa z (, [, ] i {, } . )) + +UWAGA: Ta funkcja jest bardzo użyteczna w debuggowaniu programu + z niesparowanymi nawiasami! + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 4.4.: POLECENIE SUBSTITUTE (zamiana) + + + ** Wpisz :s/stary/nowy/g aby zamienić 'stary' na 'nowy'. ** + + 1. Przenieś kursor do linii poniżej oznaczonej --->. + + 2. Wpisz :s/czaas/czas . Zauważ, że to polecenie zmienia + tylko pierwsze wystąpienie 'czaas' w linii. + + 3. Teraz wpisz :s/czaas/czas/g . Dodane g oznacza zamianę (substytucję) + globalnie w całej linii. Zmienia wszystkie wystąpienia 'czaas' w linii. + +---> Najlepszy czaas na zobaczenie najładniejszych kwiatów to czaas wiosny. + + 4. Aby zmienić wszystkie wystąpienia łańcucha znaków pomiędzy dwoma liniami, + wpisz: :#,#s/stare/nowe/g gdzie #,# są numerami linii ograniczających + region gdzie ma nastąpić zamiana. + wpisz :%s/stare/nowe/g by zmienić wszystkie wystąpienia w całym pliku. + wpisz :%s/stare/nowe/gc by zmienić wszystkie wystąpienia w całym + pliku, prosząc o potwierdzenie za każdym razem + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKCJA 4. PODSUMOWANIE + + 1. CTRL-G pokaże Twoją pozycję w pliku i status pliku. SHIFT-G przenosi + cię do końca pliku. + G przenosi do końca pliku. + liczba G przenosi do linii [liczba]. + gg przenosi do pierwszej linii. + + 2. Wpisanie / a następnie łańcucha znaków szuka łańcucha DO PRZODU. + Wpisanie ? a następnie łańcucha znaków szuka łańcucha DO TYŁU. + Po wyszukiwaniu wciśnij n by znaleźć następne wystąpienie szukanej + frazy tym samym kierunku lub N by szukać w kierunku przeciwnym. + CTRL-O przenosi do starszych pozycji, CTRL-I do nowszych. + + 3. Wpisanie % gdy kursor znajduje się na (,),[,],{, lub } lokalizuje + parujący znak. + + 4. By zamienić pierwszy stary na nowy w linii wpisz :s/stary/nowy + By zamienić wszystkie stary na nowy w linii wpisz :s/stary/nowy/g + By zamienić frazy pomiędzy dwoma liniami # wpisz :#,#s/stary/nowy/g + By zamienić wszystkie wystąpienia w pliku wpisz :%s/stary/nowy/g + By Vim prosił Cię o potwierdzienie dodaj 'c' :%s/stary/nowy/gc +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 5.1.: JAK WYKONAĆ POLECENIA ZEWNĘTRZNE + + + ** Wpisz :! a następnie zewnętrzne polecenie by je wykonać. ** + + 1. Wpisz znajome polecenie : by ustawić kursor na dole ekranu. To pozwala + na wprowadzenie polecenia. + + 2. Teraz wstaw ! (wykrzyknik). To umożliwi Ci wykonanie dowolnego + zewnętrznego polecenia powłoki. + + 3. Jako przykład wpisz ls za ! a następnie wciśnij . To polecenie + pokaże spis plików w Twoim katalogu, tak jakbyś był przy znaku zachęty + powłoki. Możesz też użyć :!dir jeśli ls nie działa. + +Uwaga: W ten sposób można wykonać wszystkie polecenia powłoki. +Uwaga: Wszystkie polecenia : muszą być zakończone . + Od tego momentu nie zawsze będziemy o tym wspominać. + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 5.2.: WIĘCEJ O ZAPISYWANIU PLIKÓW + + + ** By zachować zmiany w tekści wpisz :w NAZWA_PLIKU . ** + + 1. Wpisz :!dir lub :!ls by zobaczyć spis plików w katalogu. + Już wiesz, że musisz wcisnąć po tym. + + 2. Wybierz nazwę pliku jaka jeszcze nie istnieje, np. TEST. + + 3. Teraz wpisz: :w TEST (gdzie TEST jest nazwą pliku jaką wybrałeś.) + + 4. To polecenie zapamięta cały plik (Vim Tutor) pod nazwą TEST. + By to sprawdzić wpisz :!dir lub :!ls , żeby znowu zobaczyć listę plików. + +Uwaga: Zauważ, że gdybyś teraz wyszedł z Vim-a, a następnie wszedł ponownie + komendą vim TEST , plik byłby dokładną kopią tutoriala kiedy go + zapisywałeś. + + 5. Teraz usuń plik wpisując: :!rm TEST + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 5.3.: WYBRANIE TEKSTU DO ZAPISU + + + ** By zachować część pliku wpisz v ruch :w NAZWA_PLIKU ** + + 1. Przenieś kursor do tego wiersza. + + 2. Wciśnij v i przenieś kursor do punktu 5. Zauważ, że tekst został + podświetlony. + + 3. Wciśnij znak : . Na dole ekranu pojawi się :'<,'> . + + 4. Wpisz w TEST , gdzie TEST to nazwa pliku, który jeszcze nie istnieje. + Upewnij się, że widzisz :'<,'>w TEST zanim wciśniesz Enter. + + 5. Vim zapisze wybrane linie do pliku TEST. Użyj :!dir lub :!ls , żeby to + zobaczyć. Jeszcze go nie usuwaj! Użyjemy go w następnej lekcji. + +UWAGA: Wciśnięcie v zaczyna tryb Wizualny. Możesz poruszać kursorem by + zmienić rozmiary zaznaczenia. Możesz też użyć operatora by zrobić coś + z tekstem. Na przykład d usuwa tekst. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 5.4.: WSTAWIANIE I ŁĄCZENIE PLIKÓW + + + ** By wstawić zawartość pliku wpisz :r NAZWA_PLIKU ** + + 1. Umieść kursor tuż powyżej tej linii. + +UWAGA: Po wykonaniu kroku 2. zobaczysz tekst z Lekcji 5.3. Potem przejdź + do DOŁU by zobaczyć ponownie tę lekcję. + + 2. Teraz wczytaj plik TEST używając polecenia :r TEST , gdzie TEST + jest nazwą pliku. + Wczytany plik jest umieszczony poniżej linii z kursorem. + + 3. By sprawdzić czy plik został wczytany cofnij kursor i zobacz, że + teraz są dwie kopie Lekcji 5.3., oryginał i kopia z pliku. + +UWAGA: Możesz też wczytać wyjście zewnętrznego polecenia. Na przykład + :r !ls wczytuje wyjście polecenia ls i umieszcza je pod kursorem. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKCJA 5. PODSUMOWANIE + + + 1. :!polecenie wykonuje polecenie zewnętrzne. + + Użytecznymi przykładami są: + + :!dir - pokazuje spis plików w katalogu. + + :!rm NAZWA_PLIKU - usuwa plik NAZWA_PLIKU. + + 2. :w NAZWA_PLIKU zapisuje obecny plik Vim-a na dysk z nazwą NAZWA_PLIKU. + + 3. v ruch :w NAZWA_PLIKU zapisuje Wizualnie wybrane linie do NAZWA_PLIKU. + + 4. :r NAZWA_PLIKU wczytuje z dysku plik NAZWA_PLIKU i wstawia go do + bieżącego pliku poniżej kursora. + + 5. :r !dir wczytuje wyjście polecenia dir i umieszcza je poniżej kursora. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 6.1.: POLECENIE OPEN (otwórz) + + + ** Wpisz o by otworzyć linię poniżej kursora i przenieść się do + trybu Insert (wprowadzanie). ** + + 1. Przenieś kursor do linii poniżej oznaczonej --->. + + 2. Wpisz o (małe) by otworzyć linię PONIŻEJ kursora i przenieść się + do trybu Insert (wprowadzanie). + + 3. Wpisz trochę tekstu i wciśnij by wyjść z trybu Insert (wprowadzanie). + +---> Po wciśnięciu o kursor znajdzie się w otwartej linii w trybie Insert. + + 4. By otworzyć linię POWYŻEJ kursora wciśnij wielkie O zamiast małego + o . Wypróbuj to na linii poniżej. + +---> Otwórz linię powyżej wciskając SHIFT-O gdy kursor będzie na tej linii. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 6.2.: POLECENIE APPEND (dodaj) + + + ** Wpisz a by dodać tekst ZA kursorem. ** + + 1. Przenieś kursor do początku pierwszej linii poniżej oznaczonej ---> + + 2. Wciskaj e dopóki kursor nie będzie na końcu li . + + 3. Wpisz a (małe) aby dodać tekst ZA znakiem pod kursorem. + + 4. Dokończ wyraz tak jak w linii poniżej. Wciśnij aby opuścić tryb + Insert. + + 5. Użyj e by przejść do kolejnego niedokończonego wyraze i powtarzaj kroki + 3. i 4. + +---> Ta li poz Ci ćwi dodaw teks do koń lin +---> Ta linia pozwoli Ci ćwiczyć dodawanie tekstu do końca linii. + +Uwaga: a , i and A prowadzą do trybu Insert, jedyną różnicą jest miejsce + gdzie nowe znaki będą dodawane. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 6.3.: INNA WERSJA REPLACE (zamiana) + + + ** Wpisz wielkie R by zamienić więcej niż jeden znak. ** + + 1. Przenieś kursor do pierwszej linii poniżej oznaczonej --->. Przenieś + kursor do pierwszego xxx . + + 2. Wciśnij R i wpisz numer poniżej w drugiej linii, tak, że zastąpi on + xxx. + + 3. Wciśnij by opuścić tryb Replace. Zauważ, że reszta linii pozostaje + niezmieniona. + + 5. Powtarzaj kroki by wymienić wszystkie xxx. + +---> Dodanie 123 do xxx daje xxx. +---> Dodanie 123 do 456 daje 579. + +UWAGA: Tryb Replace jest jak tryb Insert, ale każdy znak usuwa istniejący + znak. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 6.4.: KOPIOWANIE I WKLEJANIE TEKSTU + + + ** użyj operatora y aby skopiować tekst i p aby go wkleić ** + + 1. Przejdź do linii oznaczonej ---> i umieśc kursor za "a)". + + 2. Wejdź w tryb Visual v i przenieś kursor na początek "pierwszy". + + 3. Wciśnij y aby yankować (kopiować) podświetlony tekst. + + 4. Przenieś kursor do końca następnej linii: j$ + + 5. Wciśnij p aby wpakować (paste) tekst. Dodaj: a drugi . + + 6. Użyj trybu Visual aby wybrać " element.", yankuj go y , przejdź do końca + następnej linii j$ i upakuj tam tekst z p . + +---> a) to jest pierwszy element. + b) +Uwaga: możesz użyć y jako operatora; yw kopiuje jeden wyraz. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 6.5.: USTAWIANIE OPCJI + + +** Ustawianie opcji tak by szukaj lub substytucja ignorowały wielkość liter ** + + 1. Szukaj 'ignore' wpisując: /ignore + Powtórz szukanie kilka razy naciskając klawisz n . + + 2. Ustaw opcję 'ic' (Ignore case -- ignoruj wielkość liter) poprzez + wpisanie: :set ic + + 3. Teraz szukaj 'ignore' ponownie wciskując: n + Zauważ, że Ignore i IGNORE także są teraz znalezione. + + 4. Ustaw opcje 'hlsearch' i 'incsearch': :set hls is + + 5. Teraz wprowadź polecenie szukaj ponownie i zobacz co się zdarzy: + /ignore + + 6. Aby wyłączyć ignorowanie wielkości liter: :set noic + +Uwaga: Aby usunąć podświetlanie dopasowań wpisz: :nohlsearch +Uwaga: Aby ignorować wielkość liter dla jednego wyszukiwania: /ignore\c +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKCJA 6. PODSUMOWANIE + + + 1. Wpisanie o otwiera linię PONIŻEJ kursora. + Wpisanie wielkiego O otwiera linię POWYŻEJ kursora. + 2. Wpisz a by wstawić tekst ZA znakiem na, którym jest kursor. + Wpisanie wielkiego A dodaje tekst na końcu linii. + 3. Polecenie e przenosi do końca wyrazu. + 4. Operato y yankuje (kopiuje) tekst, p pakuje (wkleja, paste) go. + 5. Wpisanie wielkiego R wprowadza w tryb Replace (zamiana) dopóki + nie zostanie wciśnięty . + 6. Wpisanie ":set xxx" ustawia opcję "xxx". Nietkóre opcje: + 'ic' 'ignorecase' ignoruj wielkość znaków + 'is' 'incsearch' pokaż częściowe dopasowania + 'hls' 'hlsearch' podświetl wszystkie dopasowania + Możesz użyć zarówno długiej jak i krótkiej formy. + 7. Dodaj "no" aby wyłączyć opcję: :set noic + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKCJA 7.1. JAK UZYSKAĆ POMOC + + ** Użycie systemu pomocy on-line ** + + Vim posiada bardzo dobry system pomocy on-line. By zacząć spróbuj jednej + z trzech możliwości: + - wciśnij klawisz (jeśli takowy posiadasz) + - wciśnij klawisz (jeśli takowy posiadasz) + - wpisz :help + + Przeczytaj tekst w oknie pomocy aby dowiedzieć się jak działa pomoc. + wpisz CTRL-W CTRL-W aby przeskoczyć z jednego okna do innego + wpisz :q aby zamknąć okno pomocy. + + Możesz też znaleźć pomoc na każdy temat podając argument polecenia ":help". + Spróbuj tych (nie zapomnij wcisnąć ): + + :help w + :help c_CTRL-D + :help insert-index + :help user-manual +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKCJA 7.2. TWORZENIE SKRYPTU STARTOWEGO + + ** Włącz możliwości Vim-a ** + + Vim ma o wiele więcej możliwości niż Vi, ale większość z nich jest domyślnie + wyłączona. Jeśli chcesz włączyć te możliwości na starcie musisz utworzyć + plik "vimrc". + + 1. Początek edycji pliku "vimrc" zależy od Twojego systemu: + :edit ~/.vimrc dla Uniksa + :edit $VIM/_vimrc dla MS-Windows + 2. Teraz wczytaj przykładowy plik "vimrc": + :read $VIMRUNTIME/vimrc_example.vim + 3. Zapisz plik: + :w + + Następnym razem gdy zaczniesz pracę w Vimie będzie on używać podświetlania + składni. Możesz dodać wszystkie swoje ulubione ustawienia do tego pliku + "vimrc". + Aby uzyskać więcej informacji wpisz :help vimrc-intro + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 7.3.: UZUPEŁNIANIE + + + ** Uzupełnianie linii poleceń z CTRL-D i ** + + 1. Upewnij się, że Vim nie jest w trybie kompatybilności: :set nocp + + 2. Zerknij jakie pliki są w bieżącm katalogu: :!ls lub :!dir + + 3. Wpisz początek polecenia: :e + + 4. Wciśnij CTRL-D i Vim pokaże listę poleceń jakie zaczynają się na "e". + + 5. Wciśnij i Vim uzupełni polecenie do ":edit". + + 6. Dodaj spację i zacznij wpisywać nazwę istniejącego pliku: :edit FIL + + 7. Wciśnij . Vim uzupełni nazwę (jeśli jest niepowtarzalna). + +UWAGA: Uzupełnianie działa dla wielu poleceń. Spróbuj wcisnąć CTRL-D i . + Użyteczne zwłaszcza przy :help . +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Lekcja 7. PODSUMOWANIE + + + 1. Wpisz :help lub wciśnij lub aby otworzyć okno pomocy. + + 2. Wpisz :help cmd aby uzyskać pomoc o cmd . + + 3. Wpisz CTRL-W CTRL-W aby przeskoczyć do innego okna. + + 4. Wpisz :q aby zamknąć okno pomocy. + + 5. Utwórz plik startowy vimrc aby zachować wybrane ustawienia. + + 6. Po poleceniu : , wciśnij CTRL-D aby zobaczyć możliwe uzupełnienia. + Wciśnij aby użyć jednego z nich. + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Tutaj się kończy tutorial Vim-a. Został on pomyślany tak aby dać krótki + przegląd jego możliwości, wystarczający byś mógł go używać. Jest on + daleki od kompletności ponieważ Vim ma o wiele, wiele więcej poleceń. + + Dla dalszej nauki rekomendujemy książkę: + Vim - Vi Improved - autor Steve Oualline + Wydawca: New Riders + Pierwsza ksiązka całkowicie poświęcona Vim-owi. Użyteczna zwłaszcza dla + początkujących. Zawiera wiele przykładów i ilustracji. + Zobacz http://iccf-holland.org./click5.html + + Ta książka jest starsza i bardziej o Vi niż o Vim-ie, ale także warta + polecenia: + Learning the Vi Editor - autor Linda Lamb + Wydawca: O'Reilly & Associates Inc. + To dobra książka by dowiedzieć się niemal wszystkiego co chciałbyś zrobić + z Vi. Szósta edycja zawiera też informacje o Vim-ie. + + Po polsku wydano: + Edytor vi. Leksykon kieszonkowy - autor Arnold Robbins + Wydawca: Helion 2001 (O'Reilly). + ISBN: 83-7197-472-8 + http://helion.pl/ksiazki/vilek.htm + Jest to książeczka zawierająca spis poleceń vi i jego najważniejszych + klonów (między innymi Vim-a). + + Edytor vi - autorzy Linda Lamb i Arnold Robbins + Wydawca: Helion 2001 (O'Reilly) - wg 6 ang. wydania + ISBN: 83-7197-539-2 + http://helion.pl/ksiazki/viedyt.htm + Rozszerzona wersja Learning the Vi Editor w polskim tłumaczeniu. + + Ten tutorial został napisany przez Michaela C. Pierce'a i Roberta K. Ware'a, + Colorado School of Mines korzystając z pomocy Charlesa Smitha, + Colorado State University. + E-mail: bware@mines.colorado.edu. + + Zmodyfikowane dla Vim-a przez Brama Moolenaara. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Przetłumaczone przez Mikołaja Machowskiego, + Sierpień 2001, + rev. Marzec 2002 + 2nd rev. Wrzesień 2004 + Wszelkie uwagi proszę kierować na: mikmach@wp.pl diff --git a/runtime/tutor/tutor.vim b/runtime/tutor/tutor.vim --- a/runtime/tutor/tutor.vim +++ b/runtime/tutor/tutor.vim @@ -1,6 +1,6 @@ " Vim tutor support file " Author: Eduardo F. Amatria -" Last Change: 2004 Jun 03 +" Last Change: 2004 Sep 06 " This small source file is used for detecting if a translation of the " tutor file exist, i.e., a tutor.xx file, where xx is the language. @@ -70,8 +70,12 @@ if s:ext =~? '\.zh' endif " The Polish tutor is available in two encodings, guess which one to use. -if s:ext =~? '\.pl' && &enc =~ 1250 - let s:ext = ".pl.cp1250" +if s:ext =~? '\.pl' + if &enc =~ 1250 + let s:ext = ".pl.cp1250" + elseif &enc =~ "utf-8$" + let s:ext = ".pl.utf-8" + endif endif " The Greek tutor is available in two encodings, guess which one to use diff --git a/src/Make_ming.mak b/src/Make_ming.mak --- a/src/Make_ming.mak +++ b/src/Make_ming.mak @@ -117,7 +117,7 @@ endif # c:/windows/system32 isn't a good idea, use some other dir; # to build you can put them in temp dir) ifndef MZSCHEME_LIBDIR -MZSCHEME_LIBDIR=$(MZSCHEME) +MZSCHEME_LIBDIR=-L$(MZSCHEME) endif endif @@ -510,7 +510,7 @@ uninstal.exe: uninstal.c $(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB) $(TARGET): $(OUTDIR) $(OBJ) - $(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid -L $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB) + $(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB) upx: exes upx gvim.exe diff --git a/src/buffer.c b/src/buffer.c --- a/src/buffer.c +++ b/src/buffer.c @@ -565,6 +565,7 @@ buf_freeall(buf, del_buf, wipe_buf) #ifdef FEAT_SYN_HL syntax_clear(buf); /* reset syntax info */ #endif + buf->b_flags &= ~BF_READERR; /* a read error is no longer relevant */ } /* @@ -670,17 +671,23 @@ goto_buffer(eap, start, dir, count) && (defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)) if (swap_exists_action == SEA_QUIT && *eap->cmd == 's') { - int old_got_int = got_int; - - /* Quitting means closing the split window, nothing else. - * Reset got_int here, because it causes aborting() to return TRUE - * which breaks closing a window. */ - got_int = FALSE; - +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + cleanup_T cs; + + /* Reset the error/interrupt/exception state here so that + * aborting() returns FALSE when closing a window. */ + enter_cleanup(&cs); +# endif + + /* Quitting means closing the split window, nothing else. */ win_close(curwin, TRUE); - - got_int |= old_got_int; swap_exists_action = SEA_NONE; + +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + /* Restore the error/interrupt/exception state if not discarded by a + * new aborting error, interrupt, or uncaught exception. */ + leave_cleanup(&cs); +# endif } else handle_swap_exists(old_curbuf); @@ -697,37 +704,58 @@ goto_buffer(eap, start, dir, count) handle_swap_exists(old_curbuf) buf_T *old_curbuf; { - int old_got_int = got_int; - - /* Reset got_int here, because it causes aborting() to return TRUE which - * breaks closing a buffer. */ - got_int = FALSE; +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + cleanup_T cs; +# endif if (swap_exists_action == SEA_QUIT) { +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + /* Reset the error/interrupt/exception state here so that + * aborting() returns FALSE when closing a buffer. */ + enter_cleanup(&cs); +# endif + /* User selected Quit at ATTENTION prompt. Go back to previous * buffer. If that buffer is gone or the same as the current one, * open a new, empty buffer. */ swap_exists_action = SEA_NONE; /* don't want it again */ close_buffer(curwin, curbuf, DOBUF_UNLOAD); if (!buf_valid(old_curbuf) || old_curbuf == curbuf) - old_curbuf = buflist_new(NULL, NULL, 1L, - BLN_CURBUF | BLN_LISTED | BLN_FORCE); + old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED); if (old_curbuf != NULL) enter_buffer(old_curbuf); /* If "old_curbuf" is NULL we are in big trouble here... */ + +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + /* Restore the error/interrupt/exception state if not discarded by a + * new aborting error, interrupt, or uncaught exception. */ + leave_cleanup(&cs); +# endif } else if (swap_exists_action == SEA_RECOVER) { +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + /* Reset the error/interrupt/exception state here so that + * aborting() returns FALSE when closing a buffer. */ + enter_cleanup(&cs); +# endif + /* User selected Recover at ATTENTION prompt. */ msg_scroll = TRUE; ml_recover(); MSG_PUTS("\n"); /* don't overwrite the last message */ cmdline_row = msg_row; do_modelines(FALSE); + +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + /* Restore the error/interrupt/exception state if not discarded by a + * new aborting error, interrupt, or uncaught exception. */ + leave_cleanup(&cs); +# endif } swap_exists_action = SEA_NONE; - got_int |= old_got_int; + } #endif @@ -1347,11 +1375,13 @@ enter_buffer(buf) /* Make sure the buffer is loaded. */ if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */ { +#ifdef FEAT_AUTOCMD /* If there is no filetype, allow for detecting one. Esp. useful for * ":ball" used in a autocommand. If there already is a filetype we * might prefer to keep it. */ if (*curbuf->b_p_ft == NUL) did_filetype = FALSE; +#endif open_buffer(FALSE, NULL); } @@ -1408,7 +1438,6 @@ enter_buffer(buf) * If (flags & BLN_CURBUF) is TRUE, may use current buffer. * If (flags & BLN_LISTED) is TRUE, add new buffer to buffer list. * If (flags & BLN_DUMMY) is TRUE, don't count it as a real buffer. - * If (flags & BLN_FORCE) is TRUE, don't abort on an error. * This is the ONLY way to create a new buffer. */ static int top_file_num = 1; /* highest file number */ @@ -1484,7 +1513,7 @@ buflist_new(ffname, sfname, lnum, flags) apply_autocmds(EVENT_BUFWIPEOUT, NULL, NULL, FALSE, curbuf); # ifdef FEAT_EVAL /* autocmds may abort script processing */ - if (!(flags & BLN_FORCE) && aborting()) + if (aborting()) return NULL; # endif #endif @@ -1538,7 +1567,7 @@ buflist_new(ffname, sfname, lnum, flags) return NULL; #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) /* autocmds may abort script processing */ - if (!(flags & BLN_FORCE) && aborting()) + if (aborting()) return NULL; #endif /* buf->b_nwindows = 0; why was this here? */ @@ -1615,7 +1644,7 @@ buflist_new(ffname, sfname, lnum, flags) apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, buf); # ifdef FEAT_EVAL /* autocmds may abort script processing */ - if (!(flags & BLN_FORCE) && aborting()) + if (aborting()) return NULL; # endif } @@ -4262,18 +4291,25 @@ ex_buffer_all(eap) #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) if (swap_exists_action == SEA_QUIT) { - int old_got_int = got_int; - - /* User selected Quit at ATTENTION prompt; close this window. - * Reset got_int here, because it causes aborting() to return - * TRUE which breaks closing a window. */ - got_int = FALSE; - +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + cleanup_T cs; + + /* Reset the error/interrupt/exception state here so that + * aborting() returns FALSE when closing a window. */ + enter_cleanup(&cs); +# endif + + /* User selected Quit at ATTENTION prompt; close this window. */ win_close(curwin, TRUE); --open_wins; - - got_int |= old_got_int; swap_exists_action = SEA_NONE; + +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + /* Restore the error/interrupt/exception state if not + * discarded by a new aborting error, interrupt, or uncaught + * exception. */ + leave_cleanup(&cs); +# endif } else handle_swap_exists(NULL); diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -2933,7 +2933,7 @@ static struct fst {"synID", 3, 3, f_synID}, {"synIDattr", 2, 3, f_synIDattr}, {"synIDtrans", 1, 1, f_synIDtrans}, - {"system", 1, 1, f_system}, + {"system", 1, 2, f_system}, {"tempname", 0, 0, f_tempname}, {"tolower", 1, 1, f_tolower}, {"toupper", 1, 1, f_toupper}, @@ -7570,16 +7570,52 @@ f_system(argvars, retvar) VAR argvars; VAR retvar; { + char_u *res = NULL; char_u *p; - - p = get_cmd_output(get_var_string(&argvars[0]), SHELL_SILENT); + char_u *infile = NULL; + char_u buf[NUMBUFLEN]; + int err = FALSE; + FILE *fd; + + if (argvars[1].var_type != VAR_UNKNOWN) + { + /* + * Write the string to a temp file, to be used for input of the shell + * command. + */ + if ((infile = vim_tempname('i')) == NULL) + { + EMSG(_(e_notmp)); + return; + } + + fd = mch_fopen((char *)infile, WRITEBIN); + if (fd == NULL) + { + EMSG2(_(e_notopen), infile); + goto done; + } + p = get_var_string_buf(&argvars[1], buf); + if (fwrite(p, STRLEN(p), 1, fd) != 1) + err = TRUE; + if (fclose(fd) != 0) + err = TRUE; + if (err) + { + EMSG(_("E677: Error writing temp file")); + goto done; + } + } + + res = get_cmd_output(get_var_string(&argvars[0]), infile, SHELL_SILENT); + #ifdef USE_CR /* translate into */ - if (p != NULL) + if (res != NULL) { char_u *s; - for (s = p; *s; ++s) + for (s = res; *s; ++s) { if (*s == CAR) *s = NL; @@ -7588,12 +7624,12 @@ f_system(argvars, retvar) #else # ifdef USE_CRNL /* translate into */ - if (p != NULL) + if (res != NULL) { char_u *s, *d; - d = p; - for (s = p; *s; ++s) + d = res; + for (s = res; *s; ++s) { if (s[0] == CAR && s[1] == NL) ++s; @@ -7603,8 +7639,15 @@ f_system(argvars, retvar) } # endif #endif + +done: + if (infile != NULL) + { + mch_remove(infile); + vim_free(infile); + } retvar->var_type = VAR_STRING; - retvar->var_val.var_string = p; + retvar->var_val.var_string = res; } /* diff --git a/src/ex_cmds.h b/src/ex_cmds.h --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -276,6 +276,8 @@ EX(CMD_cwindow, "cwindow", ex_cwindow, RANGE|NOTADR|COUNT|TRLBAR), EX(CMD_delete, "delete", ex_operators, RANGE|WHOLEFOLD|REGSTR|COUNT|TRLBAR|CMDWIN|MODIFY), +EX(CMD_delmarks, "delmarks", ex_delmarks, + BANG|EXTRA|TRLBAR|CMDWIN), EX(CMD_debug, "debug", ex_debug, NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN), EX(CMD_debuggreedy, "debuggreedy", ex_debuggreedy, diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -6679,10 +6679,24 @@ do_exedit(eap, old_curwin) need_hide = (curbufIsChanged() && curbuf->b_nwindows <= 1); if (!need_hide || P_HID(curbuf)) { +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + cleanup_T cs; + + /* Reset the error/interrupt/exception state here so that + * aborting() returns FALSE when closing a window. */ + enter_cleanup(&cs); +# endif # ifdef FEAT_GUI need_mouse_correct = TRUE; # endif win_close(curwin, !need_hide && !P_HID(curbuf)); + +# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) + /* Restore the error/interrupt/exception state if not + * discarded by a new aborting error, interrupt, or + * uncaught exception. */ + leave_cleanup(&cs); +# endif } } #endif diff --git a/src/ex_eval.c b/src/ex_eval.c --- a/src/ex_eval.c +++ b/src/ex_eval.c @@ -1820,6 +1820,151 @@ ex_endtry(eap) } /* + * Function to be called before a failed command invokes a sequence of + * autocommands for cleanup. (Failure means here that a call to emsg() has + * been made, an interrupt occurred, or there is an uncaught exception from a + * previous autocommand execution of the same command.) This function works a + * bit like ex_finally() except that there was not actually an extra try block + * around the part that failed and an error or interrupt has not (yet) been + * converted to an exception. This function saves the + * error/interrupt/exception state and prepares for the call to do_cmdline() + * that is going to be made for the cleanup autocommand execution. + * + * Stores the pending error/interrupt/exception state in the cleanup_T + * structure pointed to by "csp", which has to be passed as an argument to + * leave_cleanup() after the autocommand execution has finished. + */ + void +enter_cleanup(csp) + cleanup_T *csp; +{ + int pending = CSTP_NONE; + + /* + * Postpone did_emsg, got_int, did_throw. The pending values will be + * restored by leave_cleanup() except if there was an aborting error, + * interrupt, or uncaught exception after this function ends. + */ + if (did_emsg || got_int || did_throw || need_rethrow) + { + csp->pending = (did_emsg ? CSTP_ERROR : 0) + | (got_int ? CSTP_INTERRUPT : 0) + | (did_throw ? CSTP_THROW : 0) + | (need_rethrow ? CSTP_THROW : 0); + + /* If we are currently throwing an exception (did_throw), save it as + * well. On an error not yet converted to an exception, update + * "force_abort" and reset "cause_abort" (as do_errthrow() would do). + * This is needed for the do_cmdline() call that is going to be made + * for autocommand execution. We need not save *msg_list because + * there is an extra instance for every call of do_cmdline(), anyway. + */ + if (did_throw || need_rethrow) + csp->exception = current_exception; + else + { + csp->exception = NULL; + if (did_emsg) + { + force_abort |= cause_abort; + cause_abort = FALSE; + } + } + did_emsg = got_int = did_throw = need_rethrow = FALSE; + + /* Report if required by the 'verbose' option or when debugging. */ + report_make_pending(pending, csp->exception); + } + else + { + csp->pending = CSTP_NONE; + csp->exception = NULL; + } +} + +/* + * Function to be called after a failed command invoked a sequence of + * autocommands for cleanup. It is a bit like ex_endtry() except that there + * was not actually an extra try block around the part that failed and an + * error or interrupt had not (yet) been converted to an exception when the + * cleanup autocommand sequence was invoked. This function has to be called + * with the address of the cleanup_T structure filled by enter_cleanup() as an + * argument; it restores the error/interrupt/exception state saved by that + * function - except there was an aborting error, an interrupt or an uncaught + * exception during execution of the cleanup autocommands. In the latter + * case, the saved error/interrupt/ exception state is discarded. + */ + void +leave_cleanup(csp) + cleanup_T *csp; +{ + int pending = csp->pending; + + if (pending == CSTP_NONE) /* nothing to do */ + return; + + /* If there was an aborting error, an interrupt, or an uncaught exception + * after the corresponding call to enter_cleanup(), discard what has been + * made pending by it. Report this to the user if required by the + * 'verbose' option or when debugging. */ + if (aborting() || need_rethrow) + { + if (pending & CSTP_THROW) + /* Cancel the pending exception (includes report). */ + discard_exception((except_T *)csp->exception, FALSE); + else + report_discard_pending(pending, NULL); + + /* If an error was about to be converted to an exception when + * enter_cleanup() was called, free the message list. */ + free_msglist(*msg_list); + *msg_list = NULL; + } + + /* + * If there was no new error, interrupt, or throw between the calls + * to enter_cleanup() and leave_cleanup(), restore the pending + * error/interrupt/exception state. + */ + else + { + /* + * If there was an exception being thrown when enter_cleanup() was + * called, we need to rethrow it. Make it the exception currently + * being thrown. + */ + if (pending & CSTP_THROW) + current_exception = csp->exception; + + /* + * If an error was about to be converted to an exception when + * enter_cleanup() was called, let "cause_abort" take the part of + * "force_abort" (as done by cause_errthrow()). + */ + else if (pending & CSTP_ERROR) + { + cause_abort = force_abort; + force_abort = FALSE; + } + + /* + * Restore the pending values of did_emsg, got_int, and did_throw. + */ + if (pending & CSTP_ERROR) + did_emsg = TRUE; + if (pending & CSTP_INTERRUPT) + got_int = TRUE; + if (pending & CSTP_THROW) + need_rethrow = TRUE; /* did_throw will be set by do_one_cmd() */ + + /* Report if required by the 'verbose' option or when debugging. */ + report_resume_pending(pending, + (pending & CSTP_THROW) ? (void *)current_exception : NULL); + } +} + + +/* * Make conditionals inactive and discard what's pending in finally clauses * until the conditional type searched for or a try conditional not in its * finally clause is reached. If this is in an active catch clause, finish the diff --git a/src/fileio.c b/src/fileio.c --- a/src/fileio.c +++ b/src/fileio.c @@ -3832,8 +3832,10 @@ restore_backup: #ifdef FEAT_MBYTE /* * The BOM is written just after the encryption magic number. + * Skip it when appending and the file already existed, the BOM only makes + * sense at the start of the file. */ - if (buf->b_p_bomb && !write_bin) + if (buf->b_p_bomb && !write_bin && (!append || perm < 0)) { write_info.bw_len = make_bom(buffer, fenc); if (write_info.bw_len > 0) diff --git a/src/gui_kde_wid.cc b/src/gui_kde_wid.cc --- a/src/gui_kde_wid.cc +++ b/src/gui_kde_wid.cc @@ -154,9 +154,9 @@ void gui_keypress(QKeyEvent *e); int gui_mch_haskey(char_u * name)//{{{ { - for (int i=0; special_keys[i].qtkey != 0; i++) - if (name[0] == special_keys[i].code0 && - name[1] == special_keys[i].code1) + for (int i = 0; special_keys[i].qtkey != 0; i++) + if (name[0] == special_keys[i].code0 + && name[1] == special_keys[i].code1) return OK; return FAIL; }//}}} @@ -164,20 +164,20 @@ gui_mch_haskey(char_u * name)//{{{ /* * custom Frame for drawing ... */ -void VimWidget::paintEvent( QPaintEvent *e)//{{{ +void VimWidget::paintEvent(QPaintEvent *e)//{{{ { QRect r = e->rect(); - gui_redraw(r.x(), r.y(), r.width(), r.height() ); + gui_redraw(r.x(), r.y(), r.width(), r.height()); }//}}} void VimWidget::draw_string(int x, int y, QString s, int len, int flags)//{{{ { - gui.current_font->setBold( flags & DRAW_BOLD ); - gui.current_font->setUnderline( flags & DRAW_UNDERL ); + gui.current_font->setBold(flags & DRAW_BOLD); + gui.current_font->setUnderline(flags & DRAW_UNDERL); gui.current_font->setItalic(flags & DRAW_ITALIC); - painter->setBackgroundMode( flags & DRAW_TRANSP ? Qt::TransparentMode : Qt::OpaqueMode); - painter->setFont( *(gui.current_font) ); - painter->drawText( x, y, s, len); + painter->setBackgroundMode(flags & DRAW_TRANSP ? Qt::TransparentMode : Qt::OpaqueMode); + painter->setFont(*(gui.current_font)); + painter->drawText(x, y, s, len); }//}}} void VimWidget::mousePressEvent(QMouseEvent *event)//{{{ @@ -1165,36 +1165,9 @@ void VimMainWindow::showAboutApplication I18N_NOOP("NetBSD configure/compilation fixes") ); aboutData->setLicenseText( -"KVim as an extension of Vim follows Vim license : \n\ -Vim is Charityware. You can use and copy it as much as you like, but you are\n\ -encouraged to make a donation to orphans in Uganda. Please read the file\n\ -runtime/doc/uganda.txt for details.\n\ -\n\ -There are no restrictions on distributing an unmodified copy of Vim. Parts of\n\ -Vim may also be distributed, but this text must always be included. You are\n\ -allowed to include executables that you made from the unmodified Vim sources,\n\ -your own usage examples and Vim scripts.\n\ -\n\ -If you distribute a modified version of Vim, you are encouraged to send the\n\ -maintainer a copy, including the source code. Or make it available to the\n\ -maintainer through ftp; let him know where it can be found. If the number of\n\ -changes is small (e.g., a modified Makefile) e-mailing the diffs will do.\n\ -When the maintainer asks for it (in any way) you must make your changes,\n\ -including source code, available to him.\n\ -\n\ -The maintainer reserves the right to include any changes in the official\n\ -version of Vim. This is negotiable. You are not allowed to distribute a\n\ -modified version of Vim when you are not willing to make the source code\n\ -available to the maintainer.\n\ -\n\ -The current maintainer is Bram Moolenaar . If this changes, it\n\ -will be announced in appropriate places (most likely www.vim.org and\n\ -comp.editors). When it is completely impossible to contact the maintainer,\n\ -the obligation to send him modified source code ceases.\n\ -\n\ -It is not allowed to remove these restrictions from the distribution of the\n\ -Vim sources or parts of it. These restrictions may also be used for previous\n\ -Vim releases instead of the text that was included with it."); +"KVim as an extension of Vim follows Vim license.\n\ +You can read it with \":help license\"\n\ +Or read the file $VIMRUNTIME/doc/uganda.txt."); KAboutApplication *about = new KAboutApplication(aboutData); about->show(); diff --git a/src/mark.c b/src/mark.c --- a/src/mark.c +++ b/src/mark.c @@ -743,6 +743,91 @@ show_one_mark(c, arg, p, name, current) } } +/* + * ":delmarks[!] [marks]" + */ + void +ex_delmarks(eap) + exarg_T *eap; +{ + char_u *p; + int from, to; + int i; + int lower; + int digit; + int n; + + if (*eap->arg == NUL && eap->forceit) + /* clear all marks */ + clrallmarks(curbuf); + else if (eap->forceit) + EMSG(_(e_invarg)); + else if (*eap->arg == NUL) + EMSG(_(e_argreq)); + else + { + /* clear specified marks only */ + for (p = eap->arg; *p != NUL; ++p) + { + lower = ASCII_ISLOWER(*p); + digit = VIM_ISDIGIT(*p); + if (lower || digit || ASCII_ISUPPER(*p)) + { + if (p[1] == '-') + { + /* clear range of marks */ + from = *p; + to = p[2]; + if (!(lower ? ASCII_ISLOWER(p[2]) + : (digit ? VIM_ISDIGIT(p[2]) + : ASCII_ISUPPER(p[2]))) + || to < from) + { + EMSG2(_(e_invarg2), p); + return; + } + p += 2; + } + else + /* clear one lower case mark */ + from = to = *p; + + for (i = from; i <= to; ++i) + { + if (lower) + curbuf->b_namedm[i - 'a'].lnum = 0; + else + { + if (digit) + n = i - '0' + NMARKS; + else + n = i - 'A'; + namedfm[n].fmark.mark.lnum = 0; + vim_free(namedfm[n].fname); + namedfm[n].fname = NULL; + } + } + } + else + switch (*p) + { + case '"': curbuf->b_last_cursor.lnum = 0; break; + case '^': curbuf->b_last_insert.lnum = 0; break; + case '.': curbuf->b_last_change.lnum = 0; break; + case '[': curbuf->b_op_start.lnum = 0; break; + case ']': curbuf->b_op_end.lnum = 0; break; +#ifdef FEAT_VISUAL + case '<': curbuf->b_visual_start.lnum = 0; break; + case '>': curbuf->b_visual_end.lnum = 0; break; +#endif + case ' ': break; + default: EMSG2(_(e_invarg2), p); + return; + } + } + } +} + #if defined(FEAT_JUMPLIST) || defined(PROTO) /* * print the jumplist diff --git a/src/misc1.c b/src/misc1.c --- a/src/misc1.c +++ b/src/misc1.c @@ -8352,7 +8352,8 @@ expand_backtick(gap, pat, flags) buffer = eval_to_string(cmd + 1, &p); else #endif - buffer = get_cmd_output(cmd, (flags & EW_SILENT) ? SHELL_SILENT : 0); + buffer = get_cmd_output(cmd, NULL, + (flags & EW_SILENT) ? SHELL_SILENT : 0); vim_free(cmd); if (buffer == NULL) return 0; @@ -8451,8 +8452,9 @@ addfile(gap, f, flags) * Returns an allocated string, or NULL for error. */ char_u * -get_cmd_output(cmd, flags) +get_cmd_output(cmd, infile, flags) char_u *cmd; + char_u *infile; /* optional input file name */ int flags; /* can be SHELL_SILENT */ { char_u *tempname; @@ -8473,7 +8475,7 @@ get_cmd_output(cmd, flags) } /* Add the redirection stuff */ - command = make_filter_cmd(cmd, NULL, tempname); + command = make_filter_cmd(cmd, infile, tempname); if (command == NULL) goto done; diff --git a/src/normal.c b/src/normal.c --- a/src/normal.c +++ b/src/normal.c @@ -1078,8 +1078,11 @@ getcount: goto normal_end; } - msg_didout = FALSE; /* don't scroll screen up for normal command */ - msg_col = 0; + if (ca.cmdchar != K_IGNORE) + { + msg_didout = FALSE; /* don't scroll screen up for normal command */ + msg_col = 0; + } #ifdef FEAT_VISUAL old_pos = curwin->w_cursor; /* remember where cursor was */ diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -2868,6 +2868,21 @@ set_init_1() options[opt_idx].def_val[VI_DEFAULT] = p_enc; options[opt_idx].flags |= P_DEF_ALLOCED; +#if defined(MSDOS) || defined(MSWIN) || defined(OS2) || defined(MACOS) \ + || defined(VMS) + if (STRCMP(p_enc, "latin1") == 0 +# ifdef FEAT_MBYTE + || enc_utf8 +# endif + ) + { + /* Adjust the default for 'isprint' to match latin1. */ + set_string_option_direct((char_u *)"isp", -1, + (char_u *)"@,161-255", OPT_FREE); + (void)init_chartab(); + } +#endif + # if defined(WIN3264) && !defined(FEAT_GUI) /* Win32 console: When GetACP() returns a different value from * GetConsoleCP() set 'termencoding'. */ @@ -4673,6 +4688,7 @@ did_set_string_option(opt_idx, varp, new char_u *s, *p; int did_chartab = FALSE; char_u **gvarp; + int free_oldval = (options[opt_idx].flags & P_ALLOCED); /* Get the global option to compare with, otherwise we would have to check * two values for all local options. */ @@ -5818,8 +5834,10 @@ did_set_string_option(opt_idx, varp, new #endif /* * Free string options that are in allocated memory. + * Use "free_oldval", because recursiveness may change the flags under + * our fingers (esp. init_highlight()). */ - if (options[opt_idx].flags & P_ALLOCED) + if (free_oldval) free_string_option(oldval); if (new_value_alloced) options[opt_idx].flags |= P_ALLOCED; diff --git a/src/os_riscos.c b/src/os_riscos.c --- a/src/os_riscos.c +++ b/src/os_riscos.c @@ -654,7 +654,7 @@ mch_can_exe(name) if (buf == NULL) return -1; sprintf((char *)buf, "which %s", name); - p = get_cmd_output(buf, SHELL_SILENT); + p = get_cmd_output(buf, NULL, SHELL_SILENT); vim_free(buf); if (p == NULL) return -1; diff --git a/src/os_win32.c b/src/os_win32.c --- a/src/os_win32.c +++ b/src/os_win32.c @@ -3926,10 +3926,10 @@ mch_write( else if (s[0] == ESC && len >= 3-1 && s[1] == '|') { #ifdef MCH_WRITE_DUMP - char_u* old_s = s; + char_u *old_s = s; #endif - char_u* p; - int arg1 = 0, arg2 = 0; + char_u *p; + int arg1 = 0, arg2 = 0; switch (s[2]) { diff --git a/src/po/sv.po b/src/po/sv.po --- a/src/po/sv.po +++ b/src/po/sv.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Vim 6.2\n" "POT-Creation-Date: 2004-01-30 11:57+0100\n" -"PO-Revision-Date: 2004-04-24 21:54+0200\n" +"PO-Revision-Date: 2004-09-07 17:10%z\n" "Last-Translator: Johan Svedberg \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" @@ -1357,7 +1357,7 @@ msgstr "E192: Rekursiv anvndning av :normal fr djup" #: ex_docmd.c:8033 msgid "E194: No alternate file name to substitute for '#'" -msgstr "E194: Inget alternativt filnamn att byta ut '#' med" +msgstr "E194: Inget alternativt filnamn att erstta '#' med" #: ex_docmd.c:8064 msgid "E495: no autocommand file name to substitute for \"\"" @@ -1369,11 +1369,11 @@ msgstr "E496: inget autokommando-buffernummer att erstta \"\" med" #: ex_docmd.c:8083 msgid "E497: no autocommand match name to substitute for \"\"" -msgstr "E497: inget autokommando-trffnamn att byta ut \"\" med" +msgstr "E497: inget autokommando-trffnamn att erstta \"\" med" #: ex_docmd.c:8093 msgid "E498: no :source file name to substitute for \"\"" -msgstr "E498: inget :source-filnamn att byta ut \"\" med" +msgstr "E498: inget :source-filnamn att erstta \"\" med" #: ex_docmd.c:8134 #, no-c-format @@ -3263,7 +3263,7 @@ msgstr "-foreground \tAnvnd fr vanlig text (ven: -fg)" #: main.c:2533 main.c:2553 msgid "-font \t\tUse for normal text (also: -fn)" -msgstr "-font \t\tAnvnd fr vanlig text (ven: -fn)" +msgstr "-font \tAnvnd fr vanlig text (ven: -fn)" #: main.c:2534 msgid "-boldfont \tUse for bold text" @@ -6314,7 +6314,7 @@ msgstr "E32: Inget filnamn" #: globals.h:1240 msgid "E33: No previous substitute regular expression" -msgstr "E33: Inget tidigare utbytningsreguljruttryck" +msgstr "E33: Inget tidigare reguljrt uttryck fr ersttning" #: globals.h:1241 msgid "E34: No previous command" diff --git a/src/proto/ex_eval.pro b/src/proto/ex_eval.pro --- a/src/proto/ex_eval.pro +++ b/src/proto/ex_eval.pro @@ -23,6 +23,8 @@ void ex_try __ARGS((exarg_T *eap)); void ex_catch __ARGS((exarg_T *eap)); void ex_finally __ARGS((exarg_T *eap)); void ex_endtry __ARGS((exarg_T *eap)); +void enter_cleanup __ARGS((cleanup_T *csp)); +void leave_cleanup __ARGS((cleanup_T *csp)); int cleanup_conditionals __ARGS((struct condstack *cstack, int searched_cond, int inclusive)); void ex_endfunction __ARGS((exarg_T *eap)); int has_while_cmd __ARGS((char_u *p)); diff --git a/src/proto/mark.pro b/src/proto/mark.pro --- a/src/proto/mark.pro +++ b/src/proto/mark.pro @@ -11,6 +11,7 @@ int check_mark __ARGS((pos_T *pos)); void clrallmarks __ARGS((buf_T *buf)); char_u *fm_getname __ARGS((fmark_T *fmark, int lead_len)); void do_marks __ARGS((exarg_T *eap)); +void ex_delmarks __ARGS((exarg_T *eap)); void ex_jumps __ARGS((exarg_T *eap)); void ex_changes __ARGS((exarg_T *eap)); void mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after)); diff --git a/src/proto/misc1.pro b/src/proto/misc1.pro --- a/src/proto/misc1.pro +++ b/src/proto/misc1.pro @@ -81,7 +81,7 @@ int expand_wildcards __ARGS((int num_pat int match_suffix __ARGS((char_u *fname)); int gen_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags)); void addfile __ARGS((garray_T *gap, char_u *f, int flags)); -char_u *get_cmd_output __ARGS((char_u *cmd, int flags)); +char_u *get_cmd_output __ARGS((char_u *cmd, char_u *infile, int flags)); void FreeWild __ARGS((int count, char_u **files)); int goto_im __ARGS((void)); /* vim: set ft=c : */ diff --git a/src/regexp.c b/src/regexp.c --- a/src/regexp.c +++ b/src/regexp.c @@ -33,8 +33,8 @@ * precedence is structured in regular expressions. Serious changes in * regular-expression syntax might require a total rethink. * - * Changes have been made by Tony Andrews, Olaf 'Rhialto' Seibert, Robert Webb - * and Bram Moolenaar. + * Changes have been made by Tony Andrews, Olaf 'Rhialto' Seibert, Robert + * Webb, Ciaran McCreesh and Bram Moolenaar. * Named character class support added by Walter Briscoe (1998 Jul 01) */ @@ -376,9 +376,14 @@ static char_u *reg_prev_sub; * \t - Tab (TAB). * \e - Escape (ESC). * \b - Backspace (Ctrl_H). + * \d - Character code in decimal, eg \d123 + * \o - Character code in octal, eg \o80 + * \x - Character code in hex, eg \x4a + * \u - Multibyte character code, eg \u20ac + * \U - Long multibyte character code, eg \U12345678 */ static char_u REGEXP_INRANGE[] = "]^-n\\"; -static char_u REGEXP_ABBR[] = "nrteb"; +static char_u REGEXP_ABBR[] = "nrtebdoxuU"; static int backslash_trans __ARGS((int c)); static int skip_class_name __ARGS((char_u **pp)); @@ -681,6 +686,10 @@ static void skipchr_keepstart __ARGS((vo static int peekchr __ARGS((void)); static void skipchr __ARGS((void)); static void ungetchr __ARGS((void)); +static int gethexchrs __ARGS((int maxinputlen)); +static int getoctchrs __ARGS((void)); +static int getdecchrs __ARGS((void)); +static int coll_get_char __ARGS((void)); static void regcomp_start __ARGS((char_u *expr, int flags)); static char_u *reg __ARGS((int, int *)); static char_u *regbranch __ARGS((int *flagp)); @@ -1722,6 +1731,42 @@ regatom(flagp) break; } + case 'd': /* %d123 decimal */ + case 'o': /* %o123 octal */ + case 'x': /* %xab hex 2 */ + case 'u': /* %uabcd hex 4 */ + case 'U': /* %U1234abcd hex 8 */ + { + int i; + + switch (c) + { + case 'd': i = getdecchrs(); break; + case 'o': i = getoctchrs(); break; + case 'x': i = gethexchrs(2); break; + case 'u': i = gethexchrs(4); break; + case 'U': i = gethexchrs(8); break; + default: i = -1; break; + } + + if (i < 0) + EMSG_M_RET_NULL( + _("E678: Invalid character after %s%%[dxouU]"), + reg_magic == MAGIC_ALL); + ret = regnode(EXACTLY); + if (i == 0) + regc(0x0a); + else +#ifdef FEAT_MBYTE + regmbc(i); +#else + regc(i); +#endif + regc(NUL); + *flagp |= HASWIDTH; + break; + } + default: if (VIM_ISDIGIT(c) || c == '<' || c == '>') { @@ -1816,6 +1861,11 @@ collection: else #endif endc = *regparse++; + + /* Handle \o40, \x20 and \u20AC style sequences */ + if (endc == '\\' && !cpo_lit) + endc = coll_get_char(); + if (startc > endc) EMSG_RET_NULL(_(e_invrange)); #ifdef FEAT_MBYTE @@ -1875,6 +1925,22 @@ collection: regparse++; startc = -1; } + else if (*regparse == 'd' + || *regparse == 'o' + || *regparse == 'x' + || *regparse == 'u' + || *regparse == 'U') + { + startc = coll_get_char(); + if (startc == 0) + regc(0x0a); + else +#ifdef FEAT_MBYTE + regmbc(startc); +#else + regc(startc); +#endif + } else { startc = backslash_trans(*regparse++); @@ -2517,6 +2583,120 @@ ungetchr() } /* + * get and return the value of the hex string immediately after the current + * position. Return -1 for invalid, or 0-255 for valid. Position is updated: + * blahblah\%x20asdf + * before-^ ^-after + * The parameter controls the maximum number of input characters. This will be + * 2 when reading a \%x20 sequence and 4 when reading a \%u20AC sequence. + */ + static int +gethexchrs(maxinputlen) + int maxinputlen; +{ + int nr = 0; + int c; + int i; + + for (i = 0; i < maxinputlen; ++i) + { + c = regparse[0]; + if (!vim_isxdigit(c)) + break; + nr <<= 4; + nr |= hex2nr(c); + ++regparse; + } + + if (i == 0) + return -1; + return nr; +} + +/* + * get and return the value of the decimal string immediately after the + * current position. Return -1 for invalid. Consumes all digits. + */ + static int +getdecchrs() +{ + int nr = 0; + int c; + int i; + + for (i = 0; ; ++i) + { + c = regparse[0]; + if (c < '0' || c > '9') + break; + nr *= 10; + nr += c - '0'; + ++regparse; + } + + if (i == 0) + return -1; + return nr; +} + +/* + * get and return the value of the octal string immediately after the current + * position. Return -1 for invalid, or 0-255 for valid. Smart enough to handle + * numbers > 377 correctly (for example, 400 is treated as 40) and doesn't + * treat 8 or 9 as recognised characters. Position is updated: + * blahblah\%o210asdf + * before-^ ^-after + */ + static int +getoctchrs() +{ + int nr = 0; + int c; + int i; + + for (i = 0; i < 3 && nr < 040; ++i) + { + c = regparse[0]; + if (c < '0' || c > '7') + break; + nr <<= 3; + nr |= hex2nr(c); + ++regparse; + } + + if (i == 0) + return -1; + return nr; +} + +/* + * Get a number after a backslash that is inside []. + * When nothing is recognized return a backslash. + */ + static int +coll_get_char() +{ + int nr = -1; + + switch (*regparse++) + { + case 'd': nr = getdecchrs(); break; + case 'o': nr = getoctchrs(); break; + case 'x': nr = gethexchrs(2); break; + case 'u': nr = gethexchrs(4); break; + case 'U': nr = gethexchrs(8); break; + } + if (nr < 0) + { + /* If getting the number fails be backwards compatible: the character + * is a backslash. */ + --regparse; + nr = '\\'; + } + return nr; +} + +/* * read_limits - Read two integers to be taken as a minimum and maximum. * If the first character is '-', then the range is reversed. * Should end with 'end'. If minval is missing, zero is default, if maxval is diff --git a/src/structs.h b/src/structs.h --- a/src/structs.h +++ b/src/structs.h @@ -670,6 +670,17 @@ struct vim_exception #define ET_ERROR 1 /* error exception */ #define ET_INTERRUPT 2 /* interrupt exception triggered by Ctrl-C */ +/* + * Structure to save the error/interrupt/exception state between calls to + * enter_cleanup() and leave_cleanup(). Must be allocated as an automatic + * variable by the (common) caller of these functions. + */ +typedef struct cleanup_stuff cleanup_T; +struct cleanup_stuff +{ + int pending; /* error/interrupt/exception state */ + except_T *exception; /* exception value */ +}; #ifdef FEAT_SYN_HL /* struct passed to in_id_list() */ diff --git a/src/syntax.c b/src/syntax.c --- a/src/syntax.c +++ b/src/syntax.c @@ -6016,7 +6016,18 @@ init_highlight(both, reset) * If syntax highlighting is enabled load the highlighting for it. */ if (get_var_value((char_u *)"g:syntax_on") != NULL) - (void)cmd_runtime((char_u *)"syntax/syncolor.vim", TRUE); + { + static int recursive = 0; + + if (recursive >= 5) + EMSG(_("E679: recursive loop loading syncolor.vim")); + else + { + ++recursive; + (void)cmd_runtime((char_u *)"syntax/syncolor.vim", TRUE); + --recursive; + } + } #endif } diff --git a/src/testdir/test.ok b/src/testdir/test.ok new file mode 100644 --- /dev/null +++ b/src/testdir/test.ok @@ -0,0 +1,92 @@ +Results of test49.vim: +*** Test 1: OK (34695) +*** Test 2: OK (34695) +*** Test 3: OK (1384648195) +*** Test 4: OK (32883) +*** Test 5: OK (32883) +*** Test 6: OK (603978947) +*** Test 7: OK (90563) +*** Test 8: OK (562493431) +*** Test 9: OK (363) +*** Test 10: OK (559615) +*** Test 11: OK (2049) +*** Test 12: OK (352256) +*** Test 13: OK (145) +*** Test 14: OK (42413) +*** Test 15: OK (42413) +*** Test 16: OK (8722) +*** Test 17: OK (285127993) +*** Test 18: OK (67224583) +*** Test 19: OK (69275973) +*** Test 20: OK (1874575085) +*** Test 21: OK (147932225) +*** Test 22: OK (4161) +*** Test 23: OK (49) +*** Test 24: OK (41) +*** Test 25: OK (260177811) +*** Test 26: OK (1681500476) +*** Test 27: OK (1996459) +*** Test 28: OK (1996459) +*** Test 29: OK (170428555) +*** Test 30: OK (190905173) +*** Test 31: OK (190905173) +*** Test 32: OK (354833067) +--- Test 33: sum = 178275600 (ok) +*** Test 33: OK (1216907538) +*** Test 34: OK (2146584868) +*** Test 35: OK (2146584868) +*** Test 36: OK (1071644672) +*** Test 37: OK (1071644672) +*** Test 38: OK (357908480) +*** Test 39: OK (357908480) +*** Test 40: OK (357908480) +*** Test 41: OK (3076095) +*** Test 42: OK (1505155949) +*** Test 43: OK (1157763329) +*** Test 44: OK (1031761407) +*** Test 45: OK (1157763329) +*** Test 46: OK (739407) +*** Test 47: OK (371213935) +*** Test 48: OK (756255461) +*** Test 49: OK (179000669) +*** Test 50: OK (363550045) +*** Test 51: OK (40744667) +*** Test 52: OK (1247112011) +*** Test 53: OK (131071) +*** Test 54: OK (2047) +*** Test 55: OK (1023) +*** Test 56: OK (511) +*** Test 57: OK (2147450880) +*** Test 58: OK (624945) +*** Test 59: OK (2038431743) +*** Test 60: OK (311511339) +*** Test 61: OK (374889517) +*** Test 62: OK (286331153) +*** Test 63: OK (236978127) +*** Test 64: OK (1499645335) +*** Test 65: OK (70187) +*** Test 66: OK (5464) +*** Test 67: OK (212514423) +*** Test 68: OK (212514423) +*** Test 69: OK (8995471) +*** Test 70: OK (69544277) +*** Test 71: OK (34886997) +*** Test 72: OK (1789569365) +*** Test 73: OK (9032615) +*** Test 74: OK (224907669) +*** Test 75: OK (2000403408) +*** Test 76: OK (1610087935) +*** Test 77: OK (1388671) +*** Test 78: OK (134217728) +*** Test 79: OK (70288929) +*** Test 80: OK (17895765) +*** Test 81: OK (387) +*** Test 82: OK (8454401) +*** Test 83: OK (2835) +*** Test 84: OK (934782101) +*** Test 85: OK (198689) +--- Test 86: All tests were run with throwing exceptions on error. + The $VIMNOERRTHROW control is not configured. +--- Test 86: All tests were run with throwing exceptions on interrupt. + The $VIMNOINTTHROW control is not configured. +*** Test 86: OK (50443995) diff --git a/src/testdir/test24.in b/src/testdir/test24.in index 84721d992c3b326db33beda4ce384b257c28d92f..b7bbedf5f8d03165867c2aa043e9123654c97303 GIT binary patch literal 890 zc${^TO;f@!5QaH;F(-e*GJ_|Dwot6YjKiRE^&q{`G80O)RcNqTwBY#P&6iRtUXpj; zC%a8{8!~|co_GNTduHVtJ~B*UPLo%$q#^~HFMwmp3J`0SWONBhN(-7GD+FY@$QBHy zF&Qld2b8rcsj6toN{1&X)AG$~&I-2J=XVI1grmnW98W?r5DX#b316)#X7eS3_iUBr zPyFI0w~9E^sEkP|H;iH};;o5Iw4Ld#WzF)+`w?ziF20OjTonh`eM7kC_kNW;Bv;?Y zz85GJotJ)B@7!~Hrkv|aB5!Q8EbY0m<2(~TY%T2Fc)!Hp%$mUiX3M6GXQ%LRO;bs#3;0J!Wbzu9@+_Cy~u+X6wjFdXNqv`)SGi z4{_VFzlQd)PJ?UcYnDKrsR1aoz+=d5tAXg$;4k+*2&#{|-7_<_>VxkpOiywT8K8M=z`@twqs_L$)jvVL0m@4#CIA2c diff --git a/src/testdir/test24.ok b/src/testdir/test24.ok --- a/src/testdir/test24.ok +++ b/src/testdir/test24.ok @@ -5,3 +5,15 @@ test text test text test text test text test text test text test text test text +test text test text x61 +test text test text x60-x64 +test text test text x78 5 +test text test text o143 +test text test text o140-o144 +test text test text o41 7 +test text test text \%x42 +test text test text \%o103 +test text test text [\x00] +test text test text [\x00-\x10] +test text test text [\x-z] +test text test text [\u-z] diff --git a/src/testdir/test44.in b/src/testdir/test44.in --- a/src/testdir/test44.in +++ b/src/testdir/test44.in @@ -21,6 +21,12 @@ x:" Now search for multi-byte with compo /ม่ x:" find word by change of word class /ち\<カヨ\>は +x:" Test \%u, [\u] and friends +/\%u20ac +x/[\u4f7f\u5929]\+ +x/\%U12345678 +x/[\U1234abcd\u1234\uabcd] +x/\%d21879b x:?^1?,$w! test.out :e! test.out G:put =matchstr(\"אבגד\", \".\", 0, 2) " ב @@ -42,3 +48,8 @@ 8 axx [ab]xx 9 หม่x อมx a อมx หม่x b ちカヨは +c x ¬€x +d 天使x +e y +f z +g a啷bb diff --git a/src/testdir/test44.ok b/src/testdir/test44.ok --- a/src/testdir/test44.ok +++ b/src/testdir/test44.ok @@ -9,6 +9,11 @@ 8 axx ab]xx 9 หม่x อx a อมx หx b カヨは +c x ¬x +d 使x +e y +f z +g abb ב בג א diff --git a/src/vim.h b/src/vim.h --- a/src/vim.h +++ b/src/vim.h @@ -753,7 +753,6 @@ extern char* (*dyn_libintl_textdomain)(c #define BLN_CURBUF 1 /* May re-use curbuf for new buffer */ #define BLN_LISTED 2 /* Put new buffer in buffer list */ #define BLN_DUMMY 4 /* Allocating dummy buffer */ -#define BLN_FORCE 8 /* Don't abort on error */ /* Values for in_cinkeys() */ #define KEY_OPEN_FORW 0x101