mirror of
https://github.com/macvim-dev/macvim.git
synced 2026-06-11 15:37:29 +02:00
Merge remote-tracking branch 'vim/master'
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
*eval.txt* For Vim version 7.4. Last change: 2016 Jul 23
|
||||
*eval.txt* For Vim version 7.4. Last change: 2016 Jul 24
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -2306,6 +2306,7 @@ tanh({expr}) Float hyperbolic tangent of {expr}
|
||||
tempname() String name for a temporary file
|
||||
test_alloc_fail({id}, {countdown}, {repeat})
|
||||
none make memory allocation fail
|
||||
test_autochdir() none enable 'autochdir' during startup
|
||||
test_disable_char_avail({expr}) none test without typeahead
|
||||
test_garbagecollect_now() none free memory right now for testing
|
||||
test_null_channel() Channel null value for testing
|
||||
@@ -7453,8 +7454,11 @@ test_alloc_fail({id}, {countdown}, {repeat}) *test_alloc_fail()*
|
||||
let memory allocation fail {repeat} times. When {repeat} is
|
||||
smaller than one it fails one time.
|
||||
|
||||
test_autochdir() *test_autochdir()*
|
||||
Set a flag to enable the effect of 'autochdir' before Vim
|
||||
startup has finished.
|
||||
|
||||
*test_disable_char_avail()*
|
||||
*test_disable_char_avail()*
|
||||
test_disable_char_avail({expr})
|
||||
When {expr} is 1 the internal char_avail() function will
|
||||
return |FALSE|. When {expr} is 0 the char_avail() function will
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*mbyte.txt* For Vim version 7.4. Last change: 2013 May 18
|
||||
*mbyte.txt* For Vim version 7.4. Last change: 2016 Jul 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar et al.
|
||||
@@ -1010,6 +1010,7 @@ text, you can use the 'keymap' option. This will translate one or more
|
||||
(English) characters to another (non-English) character. This only happens
|
||||
when typing text, not when typing Vim commands. This avoids having to switch
|
||||
between two keyboard settings.
|
||||
{only available when compiled with the |+keymap| feature}
|
||||
|
||||
The value of the 'keymap' option specifies a keymap file to use. The name of
|
||||
this file is one of these two:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*repeat.txt* For Vim version 7.4. Last change: 2016 Jun 11
|
||||
*repeat.txt* For Vim version 7.4. Last change: 2016 Jul 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -295,7 +295,9 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
|
||||
... not converted ...
|
||||
|
||||
< When conversion isn't supported by the system, there
|
||||
is no error message and no conversion is done.
|
||||
is no error message and no conversion is done. When a
|
||||
line can't be converted there is no error and the
|
||||
original line is kept.
|
||||
|
||||
Don't use "ucs-2" or "ucs-4", scripts cannot be in
|
||||
these encodings (they would contain NUL bytes).
|
||||
|
||||
@@ -1043,6 +1043,21 @@ This works immediately.
|
||||
|
||||
CLOJURE *ft-clojure-syntax*
|
||||
|
||||
The default syntax groups can be augmented through the
|
||||
*g:clojure_syntax_keywords* and *b:clojure_syntax_keywords* variables. The
|
||||
value should be a |Dictionary| of syntax group names to a |List| of custom
|
||||
identifiers:
|
||||
>
|
||||
let g:clojure_syntax_keywords = {
|
||||
\ 'clojureMacro': ["defproject", "defcustom"],
|
||||
\ 'clojureFunc': ["string/join", "string/replace"]
|
||||
\ }
|
||||
<
|
||||
Refer to the Clojure syntax script for valid syntax group names.
|
||||
|
||||
If the |buffer-variable| *b:clojure_syntax_without_core_keywords* is set, only
|
||||
language constants and special forms are matched.
|
||||
|
||||
Setting *g:clojure_fold* enables folding Clojure code via the syntax engine.
|
||||
Any list, vector, or map that extends over more than one line can be folded
|
||||
using the standard Vim |fold-commands|.
|
||||
|
||||
@@ -4752,8 +4752,10 @@ TRUE eval.txt /*TRUE*
|
||||
TSQL ft_sql.txt /*TSQL*
|
||||
TTpro-telnet syntax.txt /*TTpro-telnet*
|
||||
Tab intro.txt /*Tab*
|
||||
TabClosed autocmd.txt /*TabClosed*
|
||||
TabEnter autocmd.txt /*TabEnter*
|
||||
TabLeave autocmd.txt /*TabLeave*
|
||||
TabNew autocmd.txt /*TabNew*
|
||||
Tcl if_tcl.txt /*Tcl*
|
||||
TermChanged autocmd.txt /*TermChanged*
|
||||
TermResponse autocmd.txt /*TermResponse*
|
||||
@@ -4799,6 +4801,7 @@ WWW intro.txt /*WWW*
|
||||
Win32 os_win32.txt /*Win32*
|
||||
WinEnter autocmd.txt /*WinEnter*
|
||||
WinLeave autocmd.txt /*WinLeave*
|
||||
WinNew autocmd.txt /*WinNew*
|
||||
X change.txt /*X*
|
||||
X11 options.txt /*X11*
|
||||
X11-icon gui_x11.txt /*X11-icon*
|
||||
@@ -5017,6 +5020,7 @@ assert_equal() eval.txt /*assert_equal()*
|
||||
assert_exception() eval.txt /*assert_exception()*
|
||||
assert_fails() eval.txt /*assert_fails()*
|
||||
assert_false() eval.txt /*assert_false()*
|
||||
assert_inrange() eval.txt /*assert_inrange()*
|
||||
assert_match() eval.txt /*assert_match()*
|
||||
assert_notequal() eval.txt /*assert_notequal()*
|
||||
assert_notmatch() eval.txt /*assert_notmatch()*
|
||||
@@ -5064,6 +5068,8 @@ b motion.txt /*b*
|
||||
b: eval.txt /*b:*
|
||||
b:changedtick eval.txt /*b:changedtick*
|
||||
b:changelog_name filetype.txt /*b:changelog_name*
|
||||
b:clojure_syntax_keywords syntax.txt /*b:clojure_syntax_keywords*
|
||||
b:clojure_syntax_without_core_keywords syntax.txt /*b:clojure_syntax_without_core_keywords*
|
||||
b:current_syntax-variable syntax.txt /*b:current_syntax-variable*
|
||||
b:netrw_lastfile pi_netrw.txt /*b:netrw_lastfile*
|
||||
b:tex_stylish syntax.txt /*b:tex_stylish*
|
||||
@@ -6218,6 +6224,7 @@ g:clojure_fuzzy_indent_blacklist indent.txt /*g:clojure_fuzzy_indent_blacklist*
|
||||
g:clojure_fuzzy_indent_patterns indent.txt /*g:clojure_fuzzy_indent_patterns*
|
||||
g:clojure_maxlines indent.txt /*g:clojure_maxlines*
|
||||
g:clojure_special_indent_words indent.txt /*g:clojure_special_indent_words*
|
||||
g:clojure_syntax_keywords syntax.txt /*g:clojure_syntax_keywords*
|
||||
g:colors_name options.txt /*g:colors_name*
|
||||
g:decada ft_ada.txt /*g:decada*
|
||||
g:decada.Error_Format ft_ada.txt /*g:decada.Error_Format*
|
||||
@@ -8519,9 +8526,11 @@ t_ZH term.txt /*t_ZH*
|
||||
t_ZR term.txt /*t_ZR*
|
||||
t_al term.txt /*t_al*
|
||||
t_bc term.txt /*t_bc*
|
||||
t_bool-varialble eval.txt /*t_bool-varialble*
|
||||
t_cd term.txt /*t_cd*
|
||||
t_cdl version4.txt /*t_cdl*
|
||||
t_ce term.txt /*t_ce*
|
||||
t_channel-varialble eval.txt /*t_channel-varialble*
|
||||
t_ci version4.txt /*t_ci*
|
||||
t_cil version4.txt /*t_cil*
|
||||
t_cl term.txt /*t_cl*
|
||||
@@ -8533,6 +8542,7 @@ t_cv version4.txt /*t_cv*
|
||||
t_cvv version4.txt /*t_cvv*
|
||||
t_da term.txt /*t_da*
|
||||
t_db term.txt /*t_db*
|
||||
t_dict-varialble eval.txt /*t_dict-varialble*
|
||||
t_dl term.txt /*t_dl*
|
||||
t_ed version4.txt /*t_ed*
|
||||
t_el version4.txt /*t_el*
|
||||
@@ -8546,9 +8556,12 @@ t_f6 version4.txt /*t_f6*
|
||||
t_f7 version4.txt /*t_f7*
|
||||
t_f8 version4.txt /*t_f8*
|
||||
t_f9 version4.txt /*t_f9*
|
||||
t_float-varialble eval.txt /*t_float-varialble*
|
||||
t_fs term.txt /*t_fs*
|
||||
t_func-varialble eval.txt /*t_func-varialble*
|
||||
t_help version4.txt /*t_help*
|
||||
t_il version4.txt /*t_il*
|
||||
t_job-varialble eval.txt /*t_job-varialble*
|
||||
t_k1 term.txt /*t_k1*
|
||||
t_k2 term.txt /*t_k2*
|
||||
t_k3 term.txt /*t_k3*
|
||||
@@ -8573,12 +8586,15 @@ t_kr term.txt /*t_kr*
|
||||
t_ks term.txt /*t_ks*
|
||||
t_ku term.txt /*t_ku*
|
||||
t_le term.txt /*t_le*
|
||||
t_list-varialble eval.txt /*t_list-varialble*
|
||||
t_mb term.txt /*t_mb*
|
||||
t_md term.txt /*t_md*
|
||||
t_me term.txt /*t_me*
|
||||
t_mr term.txt /*t_mr*
|
||||
t_ms term.txt /*t_ms*
|
||||
t_nd term.txt /*t_nd*
|
||||
t_none-varialble eval.txt /*t_none-varialble*
|
||||
t_number-varialble eval.txt /*t_number-varialble*
|
||||
t_op term.txt /*t_op*
|
||||
t_se term.txt /*t_se*
|
||||
t_sf1 version4.txt /*t_sf1*
|
||||
@@ -8598,6 +8614,7 @@ t_sku version4.txt /*t_sku*
|
||||
t_so term.txt /*t_so*
|
||||
t_sr term.txt /*t_sr*
|
||||
t_star7 term.txt /*t_star7*
|
||||
t_string-varialble eval.txt /*t_string-varialble*
|
||||
t_tb version4.txt /*t_tb*
|
||||
t_te term.txt /*t_te*
|
||||
t_ti term.txt /*t_ti*
|
||||
@@ -8731,6 +8748,7 @@ terminfo term.txt /*terminfo*
|
||||
termresponse-variable eval.txt /*termresponse-variable*
|
||||
test-functions usr_41.txt /*test-functions*
|
||||
test_alloc_fail() eval.txt /*test_alloc_fail()*
|
||||
test_autochdir() eval.txt /*test_autochdir()*
|
||||
test_disable_char_avail() eval.txt /*test_disable_char_avail()*
|
||||
test_garbagecollect_now() eval.txt /*test_garbagecollect_now()*
|
||||
test_null_channel() eval.txt /*test_null_channel()*
|
||||
@@ -8939,6 +8957,17 @@ v:statusmsg eval.txt /*v:statusmsg*
|
||||
v:swapchoice eval.txt /*v:swapchoice*
|
||||
v:swapcommand eval.txt /*v:swapcommand*
|
||||
v:swapname eval.txt /*v:swapname*
|
||||
v:t_TYPE eval.txt /*v:t_TYPE*
|
||||
v:t_bool eval.txt /*v:t_bool*
|
||||
v:t_channel eval.txt /*v:t_channel*
|
||||
v:t_dict eval.txt /*v:t_dict*
|
||||
v:t_float eval.txt /*v:t_float*
|
||||
v:t_func eval.txt /*v:t_func*
|
||||
v:t_job eval.txt /*v:t_job*
|
||||
v:t_list eval.txt /*v:t_list*
|
||||
v:t_none eval.txt /*v:t_none*
|
||||
v:t_number eval.txt /*v:t_number*
|
||||
v:t_string eval.txt /*v:t_string*
|
||||
v:termresponse eval.txt /*v:termresponse*
|
||||
v:testing eval.txt /*v:testing*
|
||||
v:this_session eval.txt /*v:this_session*
|
||||
|
||||
+26
-30
@@ -1,4 +1,4 @@
|
||||
*todo.txt* For Vim version 7.4. Last change: 2016 Jul 17
|
||||
*todo.txt* For Vim version 7.4. Last change: 2016 Jul 23
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -35,6 +35,7 @@ not be repeated below, unless there is extra information.
|
||||
-------------------- Known bugs and current work -----------------------
|
||||
|
||||
+channel:
|
||||
- Channel test fails with Motif. Sometimes kills the X11 server.
|
||||
- When a message in the queue but there is no callback, drop it after a while?
|
||||
Add timestamp to queued messages and callbacks with ID, remove after a
|
||||
minute. Option to set the droptime.
|
||||
@@ -49,17 +50,6 @@ Later
|
||||
- job_start(): run job in a newly opened terminal.
|
||||
With xterm could use -S{pty}.
|
||||
|
||||
Quickfix refactoring. (Yegappan Lakshmanan,)
|
||||
|
||||
Quickfix improvements for background building and grepping:
|
||||
- Add a command modifier ":usefname" to quickfix commands and functions to
|
||||
keep a file name as a string and not create a buffer for it? To avoid
|
||||
creating lots of buffers. (Ramel Eshed)
|
||||
Store the relative file name and set a flag "qf_relative". Before changing
|
||||
directory turn them into full paths.
|
||||
When using getqflist() or getloclist() we need to get the bufnr for other
|
||||
plugins. Add a flag to not do that.
|
||||
|
||||
Regexp problems:
|
||||
- Since 7.4.704 the old regex engine fails to match [[:print:]] in 0xf6.
|
||||
(Manuel Ortega, 2016 Apr 24)
|
||||
@@ -115,17 +105,25 @@ What if there is an invalid character?
|
||||
Should json_encode()/json_decode() restrict recursiveness?
|
||||
Or avoid recursiveness.
|
||||
|
||||
Also use funcref for substitute, instead of \=.
|
||||
Patch to test popupmenu. Fails, possibly due to a bug.
|
||||
(Christian Brabandt, 2016 Jul 23)
|
||||
|
||||
Patch to define v:t_number etc. (Ken Takata, 2016 Jul 15)
|
||||
7 In "-- INSERT (lang) --" show the name of the keymap used instead of
|
||||
"lang". (Ilya Dogolazky)
|
||||
Patch: Show keymap name in mode indicator (Dmitri Vereshchagin, 2016 Jul 19,
|
||||
#933)
|
||||
|
||||
Python: Extended funcrefs: use func_T* structure in place of char_u* function
|
||||
names.
|
||||
(ZyX, 2013 Jul 15, update Sep 22, 24, 28; Update 2013 Dec 15, 2014 Jan 6)
|
||||
Also fixes Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5)
|
||||
Patch to fix the Problem using cgn to change a search hit when
|
||||
replacement includes hit. Reported by John Beckett, fix by Christian Brabandt,
|
||||
2016 Jan 11.
|
||||
|
||||
Once .exe with updated installer is available: Add remark to download page
|
||||
about /S and /D options (Ken Takata, 2016 Apr 13)
|
||||
Or point to nightly builds: https://github.com/vim/vim-win32-installer/releases
|
||||
|
||||
Problem with completion on "**/" in $path. (issue #932)
|
||||
Happens in uniquefy_paths() ? More info Jul 22.
|
||||
Fix for this (Harm te Hennepe, 2016 Jul 21, #939)
|
||||
|
||||
Cursor positioned in the wrong place when editing src/testdir/test_viml.vim.
|
||||
|
||||
@@ -138,20 +136,27 @@ Javascript indent wrong after /* in single quoted string:
|
||||
Use ADDR_OTHER instead of ADDR_LINES for many more commands.
|
||||
Add tests for using number larger than number of lines in buffer.
|
||||
|
||||
Updating marks in quickfix list is broken. (Yegappan, 2016 Jul 18)
|
||||
|
||||
Invalid behavior with NULL list. (Nikolai Pavlov, #768)
|
||||
|
||||
For current Windows build .pdb file is missing. (Gabriele Fava, 2016 May 11)
|
||||
5)
|
||||
|
||||
Support closure for lambda? Ken Takata is working on it.
|
||||
Patch Jul 19. Still need test updates.
|
||||
|
||||
Problem with whitespace in errorformat. (Gerd Wachsmuth, 2016 May 15, #807)
|
||||
|
||||
Undo problem: "g-" doesn't go back, gets stuck. (Björn Linse, 2016 Jul 18)
|
||||
|
||||
Patch to allow setting w:quickfix_title via setqflist() and setloclist()
|
||||
functions. (Christian Brabandt, 2013 May 8, update May 21)
|
||||
Patch to add getlocstack() / setlocstack(). (Christian Brabandt, 2013 May 14)
|
||||
Second one. Update May 22.
|
||||
Update by Daniel Hahler, 2014 Jul 4, Aug 14, Oct 14, Oct 15.
|
||||
Rethink this: can we add an argument to setqflist() and getqflist() for these
|
||||
extra items?
|
||||
|
||||
Patch to add filtering of the quickfix list. (Yegappan Lakshmanan, 2016 Mar
|
||||
13, last version) Update June 26, #830.
|
||||
@@ -160,8 +165,6 @@ Instead use a Vim script implementation, invoked from a Vim command.
|
||||
ml_get errors when reloading file. (Chris Desjardins, 2016 Apr 19)
|
||||
Also with latest version.
|
||||
|
||||
Patch to load rgb.txt once. (Christian Brabandt, 2016 Apr 29)
|
||||
|
||||
Still problems with 'emoji'. See issue #721. Patch 7.4.1697 half-fixes it.
|
||||
Avoid PLAN_WRITE in windgoto() ?
|
||||
Should already never use utf-8 chars to position the cursor.
|
||||
@@ -179,9 +182,6 @@ Otherwise task flickers in taskbar.
|
||||
Should make ":@r" handle line continuation. (Cesar Romani, 2016 Jun 26)
|
||||
Also for ":@.".
|
||||
|
||||
Patch to add TabNew, TabNewEntered and TabClosed autocommand events.
|
||||
(Felipe Morales, 2015 Feb 1)
|
||||
|
||||
Repeating 'opfunc' in a function only works once. (Tarmean, 2016 Jul 15, #925)
|
||||
|
||||
Patch on issue #728 by Christian Brabandt, 2016 Apr 7. Update with test: Apr 8.
|
||||
@@ -222,7 +222,7 @@ Reject the value? #710.
|
||||
Patch to support strikethrough next to bold and italic. (Christian Brabandt,
|
||||
2013 Jul 30) Update from Ken Takata, 2013 Oct 12.
|
||||
Update mentioned by Christian, 2016 Apr 25.
|
||||
Update from Ken Takata, 2016 Apr 26.
|
||||
Update from Ken Takata, 2016 Jul 17.
|
||||
|
||||
Patch to improve cscope. (Adrian Kocis, #843)
|
||||
|
||||
@@ -328,6 +328,8 @@ Patch from Christian Brabandt, 2016 Mar 30, #712.
|
||||
Patch to be able to use hex numbers with :digraph. (Lcd, 2015 Sep 6)
|
||||
Update Sep 7. Update by Christian Brabandt, 2015 Sep 8, 2016 Feb 1.
|
||||
|
||||
Patch to show search statistics. (Christian Brabandt, 2016 Jul 22)
|
||||
|
||||
When the CursorMovedI event triggers, and CTRL-X was typed, a script cannot
|
||||
restore the mode properly. (Andrew Stewart, 2016 Apr 20)
|
||||
Do not trigger the event?
|
||||
@@ -392,10 +394,6 @@ wrong name. (Aram, 2014 Nov 7) Vim 7.4.
|
||||
Can't recognize the $ProgramFiles(x86) environment variable. Recognize it
|
||||
specifically? First try with the parens, then without.
|
||||
|
||||
Half-finished patch to fix the Problem using cgn to change a search hit when
|
||||
replacement includes hit. Reported by John Beckett, fix by Christian Brabandt,
|
||||
2016 Jan 11.
|
||||
|
||||
Patch to add :mapgroup, put mappings in a group like augroup.
|
||||
(Yasuhiro Matsumoto, 2016 Feb 19)
|
||||
|
||||
@@ -3558,8 +3556,6 @@ Multi-byte characters:
|
||||
convert_input() for Mac GUI.
|
||||
- Add mnemonics from RFC1345 longer than two characters.
|
||||
Support CTRL-K _{mnemonic}_
|
||||
7 In "-- INSERT (lang) --" show the name of the keymap used instead of
|
||||
"lang". (Ilya Dogolazky)
|
||||
- Make 'breakat' accept multi-byte characters. Problem: can't use a lookup
|
||||
table anymore (breakat_flags[]).
|
||||
Simplistic solution: when 'formatoptions' contains "m" also break a line
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*usr_41.txt* For Vim version 7.4. Last change: 2016 Jul 09
|
||||
*usr_41.txt* For Vim version 7.4. Last change: 2016 Jul 24
|
||||
|
||||
VIM USER MANUAL - by Bram Moolenaar
|
||||
|
||||
@@ -592,7 +592,7 @@ String manipulation: *string-functions*
|
||||
match() position where a pattern matches in a string
|
||||
matchend() position where a pattern match ends in a string
|
||||
matchstr() match of a pattern in a string
|
||||
matchstrpos() match and postions of a pattern in a string
|
||||
matchstrpos() match and positions of a pattern in a string
|
||||
matchlist() like matchstr() and also return submatches
|
||||
stridx() first index of a short string in a long string
|
||||
strridx() last index of a short string in a long string
|
||||
@@ -810,6 +810,7 @@ Command line: *command-line-functions*
|
||||
setcmdpos() set position of the cursor in the command line
|
||||
getcmdtype() return the current command-line type
|
||||
getcmdwintype() return the current command-line window type
|
||||
getcompletion() list of command-line completion matches
|
||||
|
||||
Quickfix and location lists: *quickfix-functions*
|
||||
getqflist() list of quickfix errors
|
||||
@@ -907,6 +908,7 @@ Mappings: *mapping-functions*
|
||||
Testing: *test-functions*
|
||||
assert_equal() assert that two expressions values are equal
|
||||
assert_notequal() assert that two expressions values are not equal
|
||||
assert_inrange() assert that an expression is inside a range
|
||||
assert_match() assert that a pattern matches the value
|
||||
assert_notmatch() assert that a pattern does not match the value
|
||||
assert_false() assert that an expression is false
|
||||
@@ -914,6 +916,7 @@ Testing: *test-functions*
|
||||
assert_exception() assert that a command throws an exception
|
||||
assert_fails() assert that a function call fails
|
||||
test_alloc_fail() make memory allocation fail
|
||||
test_autochdir() enable 'autochdir' during startup
|
||||
test_disable_char_avail() test without typeahead
|
||||
test_garbagecollect_now() free memory right now
|
||||
test_null_channel() return a null Channel
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*version7.txt* For Vim version 7.4. Last change: 2016 Jun 04
|
||||
*version7.txt* For Vim version 7.4. Last change: 2016 Jul 17
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -18310,4 +18310,5 @@ Solution: Subtract the unsigned numbers and cast to int. (Ken Takata)
|
||||
Files: src/os_win32.c
|
||||
|
||||
|
||||
|
||||
vim:tw=78:ts=8:ft=help:norl:
|
||||
|
||||
+12251
-2
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2016 Jul 16
|
||||
" Last Change: 2016 Jul 21
|
||||
|
||||
" Listen very carefully, I will say this only once
|
||||
if exists("did_load_filetypes")
|
||||
@@ -534,7 +534,7 @@ au BufNewFile,BufRead configure.in,configure.ac setf config
|
||||
au BufNewFile,BufRead *.cu setf cuda
|
||||
|
||||
" Dockerfile
|
||||
au BufNewFile,BufRead Dockerfile setf dockerfile
|
||||
au BufNewFile,BufRead Dockerfile,*.Dockerfile setf dockerfile
|
||||
|
||||
" WildPackets EtherPeek Decoder
|
||||
au BufNewFile,BufRead *.dcd setf dcd
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: Clojure
|
||||
" Author: Meikel Brandmeyer <mb@kotka.de>
|
||||
" Language: Clojure
|
||||
" Author: Meikel Brandmeyer <mb@kotka.de>
|
||||
"
|
||||
" Maintainer: Sung Pae <self@sungpae.com>
|
||||
" URL: https://github.com/guns/vim-clojure-static
|
||||
" License: Same as Vim
|
||||
" Last Change: 27 March 2014
|
||||
" Maintainer: Sung Pae <self@sungpae.com>
|
||||
" URL: https://github.com/guns/vim-clojure-static
|
||||
" License: Same as Vim
|
||||
" Last Change: 18 July 2016
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
@@ -43,7 +43,7 @@ setlocal commentstring=;\ %s
|
||||
" specially and hence are not indented specially.
|
||||
"
|
||||
" -*- LISPWORDS -*-
|
||||
" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-010/clj/src/vim_clojure_static/generate.clj
|
||||
" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-011/clj/src/vim_clojure_static/generate.clj
|
||||
setlocal lispwords=as->,binding,bound-fn,case,catch,cond->,cond->>,condp,def,definline,definterface,defmacro,defmethod,defmulti,defn,defn-,defonce,defprotocol,defrecord,defstruct,deftest,deftest-,deftype,doseq,dotimes,doto,extend,extend-protocol,extend-type,fn,for,if,if-let,if-not,if-some,let,letfn,locking,loop,ns,proxy,reify,set-test,testing,when,when-first,when-let,when-not,when-some,while,with-bindings,with-in-str,with-local-vars,with-open,with-precision,with-redefs,with-redefs-fn,with-test
|
||||
|
||||
" Provide insert mode completions for special forms and clojure.core. As
|
||||
@@ -82,9 +82,9 @@ endif
|
||||
" Win32 can filter files in the browse dialog
|
||||
if has("gui_win32") && !exists("b:browsefilter")
|
||||
let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
|
||||
\ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
|
||||
\ "Java Source Files (*.java)\t*.java\n" .
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
\ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
|
||||
\ "Java Source Files (*.java)\t*.java\n" .
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
let b:undo_ftplugin .= ' | unlet! b:browsefilter'
|
||||
endif
|
||||
|
||||
|
||||
+141
-65
@@ -1,17 +1,12 @@
|
||||
" Vim indent file
|
||||
" Language: Clojure
|
||||
" Author: Meikel Brandmeyer <mb@kotka.de>
|
||||
" URL: http://kotka.de/projects/clojure/vimclojure.html
|
||||
" Language: Clojure
|
||||
" Author: Meikel Brandmeyer <mb@kotka.de>
|
||||
" URL: http://kotka.de/projects/clojure/vimclojure.html
|
||||
"
|
||||
" Maintainer: Sung Pae <self@sungpae.com>
|
||||
" URL: https://github.com/guns/vim-clojure-static
|
||||
" License: Same as Vim
|
||||
" Last Change: 27 March 2014
|
||||
|
||||
" TODO: Indenting after multibyte characters is broken:
|
||||
" (let [Δ (if foo
|
||||
" bar ; Indent error
|
||||
" baz)])
|
||||
" Maintainer: Sung Pae <self@sungpae.com>
|
||||
" URL: https://github.com/guns/vim-clojure-static
|
||||
" License: Same as Vim
|
||||
" Last Change: 18 July 2016
|
||||
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
@@ -57,36 +52,39 @@ if exists("*searchpairpos")
|
||||
let g:clojure_align_subforms = 0
|
||||
endif
|
||||
|
||||
function! s:SynIdName()
|
||||
function! s:syn_id_name()
|
||||
return synIDattr(synID(line("."), col("."), 0), "name")
|
||||
endfunction
|
||||
|
||||
function! s:CurrentChar()
|
||||
function! s:ignored_region()
|
||||
return s:syn_id_name() =~? '\vstring|regex|comment|character'
|
||||
endfunction
|
||||
|
||||
function! s:current_char()
|
||||
return getline('.')[col('.')-1]
|
||||
endfunction
|
||||
|
||||
function! s:CurrentWord()
|
||||
function! s:current_word()
|
||||
return getline('.')[col('.')-1 : searchpos('\v>', 'n', line('.'))[1]-2]
|
||||
endfunction
|
||||
|
||||
function! s:IsParen()
|
||||
return s:CurrentChar() =~# '\v[\(\)\[\]\{\}]' &&
|
||||
\ s:SynIdName() !~? '\vstring|regex|comment|character'
|
||||
function! s:is_paren()
|
||||
return s:current_char() =~# '\v[\(\)\[\]\{\}]' && !s:ignored_region()
|
||||
endfunction
|
||||
|
||||
" Returns 1 if string matches a pattern in 'patterns', which may be a
|
||||
" list of patterns, or a comma-delimited string of implicitly anchored
|
||||
" patterns.
|
||||
function! s:MatchesOne(patterns, string)
|
||||
function! s:match_one(patterns, string)
|
||||
let list = type(a:patterns) == type([])
|
||||
\ ? a:patterns
|
||||
\ : map(split(a:patterns, ','), '"^" . v:val . "$"')
|
||||
\ ? a:patterns
|
||||
\ : map(split(a:patterns, ','), '"^" . v:val . "$"')
|
||||
for pat in list
|
||||
if a:string =~# pat | return 1 | endif
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
function! s:MatchPairs(open, close, stopat)
|
||||
function! s:match_pairs(open, close, stopat)
|
||||
" Stop only on vector and map [ resp. {. Ignore the ones in strings and
|
||||
" comments.
|
||||
if a:stopat == 0
|
||||
@@ -95,11 +93,11 @@ if exists("*searchpairpos")
|
||||
let stopat = a:stopat
|
||||
endif
|
||||
|
||||
let pos = searchpairpos(a:open, '', a:close, 'bWn', "!s:IsParen()", stopat)
|
||||
return [pos[0], virtcol(pos)]
|
||||
let pos = searchpairpos(a:open, '', a:close, 'bWn', "!s:is_paren()", stopat)
|
||||
return [pos[0], col(pos)]
|
||||
endfunction
|
||||
|
||||
function! s:ClojureCheckForStringWorker()
|
||||
function! s:clojure_check_for_string_worker()
|
||||
" Check whether there is the last character of the previous line is
|
||||
" highlighted as a string. If so, we check whether it's a ". In this
|
||||
" case we have to check also the previous character. The " might be the
|
||||
@@ -113,17 +111,17 @@ if exists("*searchpairpos")
|
||||
|
||||
call cursor(nb, 0)
|
||||
call cursor(0, col("$") - 1)
|
||||
if s:SynIdName() !~? "string"
|
||||
if s:syn_id_name() !~? "string"
|
||||
return -1
|
||||
endif
|
||||
|
||||
" This will not work for a " in the first column...
|
||||
if s:CurrentChar() == '"'
|
||||
if s:current_char() == '"'
|
||||
call cursor(0, col("$") - 2)
|
||||
if s:SynIdName() !~? "string"
|
||||
if s:syn_id_name() !~? "string"
|
||||
return -1
|
||||
endif
|
||||
if s:CurrentChar() != '\\'
|
||||
if s:current_char() != '\\'
|
||||
return -1
|
||||
endif
|
||||
call cursor(0, col("$") - 1)
|
||||
@@ -138,40 +136,40 @@ if exists("*searchpairpos")
|
||||
return indent(".")
|
||||
endfunction
|
||||
|
||||
function! s:CheckForString()
|
||||
function! s:check_for_string()
|
||||
let pos = getpos('.')
|
||||
try
|
||||
let val = s:ClojureCheckForStringWorker()
|
||||
let val = s:clojure_check_for_string_worker()
|
||||
finally
|
||||
call setpos('.', pos)
|
||||
endtry
|
||||
return val
|
||||
endfunction
|
||||
|
||||
function! s:StripNamespaceAndMacroChars(word)
|
||||
function! s:strip_namespace_and_macro_chars(word)
|
||||
return substitute(a:word, "\\v%(.*/|[#'`~@^,]*)(.*)", '\1', '')
|
||||
endfunction
|
||||
|
||||
function! s:ClojureIsMethodSpecialCaseWorker(position)
|
||||
function! s:clojure_is_method_special_case_worker(position)
|
||||
" Find the next enclosing form.
|
||||
call search('\S', 'Wb')
|
||||
|
||||
" Special case: we are at a '(('.
|
||||
if s:CurrentChar() == '('
|
||||
if s:current_char() == '('
|
||||
return 0
|
||||
endif
|
||||
call cursor(a:position)
|
||||
|
||||
let nextParen = s:MatchPairs('(', ')', 0)
|
||||
let next_paren = s:match_pairs('(', ')', 0)
|
||||
|
||||
" Special case: we are now at toplevel.
|
||||
if nextParen == [0, 0]
|
||||
if next_paren == [0, 0]
|
||||
return 0
|
||||
endif
|
||||
call cursor(nextParen)
|
||||
call cursor(next_paren)
|
||||
|
||||
call search('\S', 'W')
|
||||
let w = s:StripNamespaceAndMacroChars(s:CurrentWord())
|
||||
let w = s:strip_namespace_and_macro_chars(s:current_word())
|
||||
if g:clojure_special_indent_words =~# '\V\<' . w . '\>'
|
||||
return 1
|
||||
endif
|
||||
@@ -179,27 +177,43 @@ if exists("*searchpairpos")
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
function! s:IsMethodSpecialCase(position)
|
||||
function! s:is_method_special_case(position)
|
||||
let pos = getpos('.')
|
||||
try
|
||||
let val = s:ClojureIsMethodSpecialCaseWorker(a:position)
|
||||
let val = s:clojure_is_method_special_case_worker(a:position)
|
||||
finally
|
||||
call setpos('.', pos)
|
||||
endtry
|
||||
return val
|
||||
endfunction
|
||||
|
||||
function! GetClojureIndent()
|
||||
" Check if form is a reader conditional, that is, it is prefixed by #?
|
||||
" or @#?
|
||||
function! s:is_reader_conditional_special_case(position)
|
||||
if getline(a:position[0])[a:position[1] - 3 : a:position[1] - 2] == "#?"
|
||||
return 1
|
||||
endif
|
||||
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
" Returns 1 for opening brackets, -1 for _anything else_.
|
||||
function! s:bracket_type(char)
|
||||
return stridx('([{', a:char) > -1 ? 1 : -1
|
||||
endfunction
|
||||
|
||||
" Returns: [opening-bracket-lnum, indent]
|
||||
function! s:clojure_indent_pos()
|
||||
" Get rid of special case.
|
||||
if line(".") == 1
|
||||
return 0
|
||||
return [0, 0]
|
||||
endif
|
||||
|
||||
" We have to apply some heuristics here to figure out, whether to use
|
||||
" normal lisp indenting or not.
|
||||
let i = s:CheckForString()
|
||||
let i = s:check_for_string()
|
||||
if i > -1
|
||||
return i + !!g:clojure_align_multiline_strings
|
||||
return [0, i + !!g:clojure_align_multiline_strings]
|
||||
endif
|
||||
|
||||
call cursor(0, 1)
|
||||
@@ -207,28 +221,28 @@ if exists("*searchpairpos")
|
||||
" Find the next enclosing [ or {. We can limit the second search
|
||||
" to the line, where the [ was found. If no [ was there this is
|
||||
" zero and we search for an enclosing {.
|
||||
let paren = s:MatchPairs('(', ')', 0)
|
||||
let bracket = s:MatchPairs('\[', '\]', paren[0])
|
||||
let curly = s:MatchPairs('{', '}', bracket[0])
|
||||
let paren = s:match_pairs('(', ')', 0)
|
||||
let bracket = s:match_pairs('\[', '\]', paren[0])
|
||||
let curly = s:match_pairs('{', '}', bracket[0])
|
||||
|
||||
" In case the curly brace is on a line later then the [ or - in
|
||||
" case they are on the same line - in a higher column, we take the
|
||||
" curly indent.
|
||||
if curly[0] > bracket[0] || curly[1] > bracket[1]
|
||||
if curly[0] > paren[0] || curly[1] > paren[1]
|
||||
return curly[1]
|
||||
return curly
|
||||
endif
|
||||
endif
|
||||
|
||||
" If the curly was not chosen, we take the bracket indent - if
|
||||
" there was one.
|
||||
if bracket[0] > paren[0] || bracket[1] > paren[1]
|
||||
return bracket[1]
|
||||
return bracket
|
||||
endif
|
||||
|
||||
" There are neither { nor [ nor (, ie. we are at the toplevel.
|
||||
if paren == [0, 0]
|
||||
return 0
|
||||
return paren
|
||||
endif
|
||||
|
||||
" Now we have to reimplement lispindent. This is surprisingly easy, as
|
||||
@@ -246,58 +260,120 @@ if exists("*searchpairpos")
|
||||
" - In any other case we use the column of the end of the word + 2.
|
||||
call cursor(paren)
|
||||
|
||||
if s:IsMethodSpecialCase(paren)
|
||||
return paren[1] + &shiftwidth - 1
|
||||
if s:is_method_special_case(paren)
|
||||
return [paren[0], paren[1] + &shiftwidth - 1]
|
||||
endif
|
||||
|
||||
if s:is_reader_conditional_special_case(paren)
|
||||
return paren
|
||||
endif
|
||||
|
||||
" In case we are at the last character, we use the paren position.
|
||||
if col("$") - 1 == paren[1]
|
||||
return paren[1]
|
||||
return paren
|
||||
endif
|
||||
|
||||
" In case after the paren is a whitespace, we search for the next word.
|
||||
call cursor(0, col('.') + 1)
|
||||
if s:CurrentChar() == ' '
|
||||
if s:current_char() == ' '
|
||||
call search('\v\S', 'W')
|
||||
endif
|
||||
|
||||
" If we moved to another line, there is no word after the (. We
|
||||
" use the ( position for indent.
|
||||
if line(".") > paren[0]
|
||||
return paren[1]
|
||||
return paren
|
||||
endif
|
||||
|
||||
" We still have to check, whether the keyword starts with a (, [ or {.
|
||||
" In that case we use the ( position for indent.
|
||||
let w = s:CurrentWord()
|
||||
if stridx('([{', w[0]) > -1
|
||||
return paren[1]
|
||||
let w = s:current_word()
|
||||
if s:bracket_type(w[0]) == 1
|
||||
return paren
|
||||
endif
|
||||
|
||||
" Test words without namespace qualifiers and leading reader macro
|
||||
" metacharacters.
|
||||
"
|
||||
" e.g. clojure.core/defn and #'defn should both indent like defn.
|
||||
let ww = s:StripNamespaceAndMacroChars(w)
|
||||
let ww = s:strip_namespace_and_macro_chars(w)
|
||||
|
||||
if &lispwords =~# '\V\<' . ww . '\>'
|
||||
return paren[1] + &shiftwidth - 1
|
||||
return [paren[0], paren[1] + &shiftwidth - 1]
|
||||
endif
|
||||
|
||||
if g:clojure_fuzzy_indent
|
||||
\ && !s:MatchesOne(g:clojure_fuzzy_indent_blacklist, ww)
|
||||
\ && s:MatchesOne(g:clojure_fuzzy_indent_patterns, ww)
|
||||
return paren[1] + &shiftwidth - 1
|
||||
\ && !s:match_one(g:clojure_fuzzy_indent_blacklist, ww)
|
||||
\ && s:match_one(g:clojure_fuzzy_indent_patterns, ww)
|
||||
return [paren[0], paren[1] + &shiftwidth - 1]
|
||||
endif
|
||||
|
||||
call search('\v\_s', 'cW')
|
||||
call search('\v\S', 'W')
|
||||
if paren[0] < line(".")
|
||||
return paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)
|
||||
return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)]
|
||||
endif
|
||||
|
||||
call search('\v\S', 'bW')
|
||||
return virtcol(".") + 1
|
||||
return [line('.'), col('.') + 1]
|
||||
endfunction
|
||||
|
||||
function! GetClojureIndent()
|
||||
let lnum = line('.')
|
||||
let orig_lnum = lnum
|
||||
let orig_col = col('.')
|
||||
let [opening_lnum, indent] = s:clojure_indent_pos()
|
||||
|
||||
" Account for multibyte characters
|
||||
if opening_lnum > 0
|
||||
let indent -= indent - virtcol([opening_lnum, indent])
|
||||
endif
|
||||
|
||||
" Return if there are no previous lines to inherit from
|
||||
if opening_lnum < 1 || opening_lnum >= lnum - 1
|
||||
call cursor(orig_lnum, orig_col)
|
||||
return indent
|
||||
endif
|
||||
|
||||
let bracket_count = 0
|
||||
|
||||
" Take the indent of the first previous non-white line that is
|
||||
" at the same sexp level. cf. src/misc1.c:get_lisp_indent()
|
||||
while 1
|
||||
let lnum = prevnonblank(lnum - 1)
|
||||
let col = 1
|
||||
|
||||
if lnum <= opening_lnum
|
||||
break
|
||||
endif
|
||||
|
||||
call cursor(lnum, col)
|
||||
|
||||
" Handle bracket counting edge case
|
||||
if s:is_paren()
|
||||
let bracket_count += s:bracket_type(s:current_char())
|
||||
endif
|
||||
|
||||
while 1
|
||||
if search('\v[(\[{}\])]', '', lnum) < 1
|
||||
break
|
||||
elseif !s:ignored_region()
|
||||
let bracket_count += s:bracket_type(s:current_char())
|
||||
endif
|
||||
endwhile
|
||||
|
||||
if bracket_count == 0
|
||||
" Check if this is part of a multiline string
|
||||
call cursor(lnum, 1)
|
||||
if s:syn_id_name() !~? '\vstring|regex'
|
||||
call cursor(orig_lnum, orig_col)
|
||||
return indent(lnum)
|
||||
endif
|
||||
endif
|
||||
endwhile
|
||||
|
||||
call cursor(orig_lnum, orig_col)
|
||||
return indent
|
||||
endfunction
|
||||
|
||||
setlocal indentexpr=GetClojureIndent()
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
" Maintainer: Benjamin Linskey <vim@benlinskey.com>
|
||||
" Last Changed: 2016 July 20
|
||||
" URL: https://github.com/blinskey/vim-armenian-keymaps
|
||||
|
||||
let b:keymap_name = "hy"
|
||||
|
||||
loadkeymap
|
||||
|
||||
" Capital letters
|
||||
A Ա
|
||||
B Բ
|
||||
C Գ
|
||||
D Դ
|
||||
Y Ե
|
||||
Z Զ
|
||||
E Է
|
||||
U Ը
|
||||
: Թ
|
||||
+ Ժ
|
||||
I Ի
|
||||
L Լ
|
||||
Q Խ
|
||||
? Ծ
|
||||
K Կ
|
||||
H Հ
|
||||
@ Ձ
|
||||
> Ղ
|
||||
J Ճ
|
||||
M Մ
|
||||
# Յ
|
||||
N Ն
|
||||
< Շ
|
||||
O Ո
|
||||
{ Չ
|
||||
P Պ
|
||||
} Ջ
|
||||
_ Ռ
|
||||
S Ս
|
||||
V Վ
|
||||
T Տ
|
||||
R Ր
|
||||
X Ց
|
||||
W Ւ
|
||||
\" Փ
|
||||
G Ք
|
||||
) Օ
|
||||
F Ֆ
|
||||
|
||||
" Lowercase letters
|
||||
a ա
|
||||
b բ
|
||||
c գ
|
||||
d դ
|
||||
y ե
|
||||
z զ
|
||||
e է
|
||||
u ը
|
||||
; թ
|
||||
= ժ
|
||||
i ի
|
||||
l լ
|
||||
q խ
|
||||
/ ծ
|
||||
k կ
|
||||
h հ
|
||||
2 ձ
|
||||
. ղ
|
||||
j ճ
|
||||
m մ
|
||||
3 յ
|
||||
n ն
|
||||
, շ
|
||||
o ո
|
||||
[ չ
|
||||
p պ
|
||||
] ջ
|
||||
- ռ
|
||||
s ս
|
||||
v վ
|
||||
t տ
|
||||
r ր
|
||||
x ց
|
||||
w ւ
|
||||
' փ
|
||||
g ք
|
||||
0 օ
|
||||
f ֆ
|
||||
|
||||
& և
|
||||
|
||||
" Punctuation
|
||||
` ՝
|
||||
~ ՜
|
||||
1 ։
|
||||
4 ՛
|
||||
5 ,
|
||||
6 -
|
||||
7 .
|
||||
8 «
|
||||
9 »
|
||||
\\ '
|
||||
| ՞
|
||||
|
||||
" Numbers
|
||||
! 1
|
||||
$ 3
|
||||
% 4
|
||||
^ 9
|
||||
@@ -0,0 +1,108 @@
|
||||
" Maintainer: Benjamin Linskey <vim@benlinskey.com>
|
||||
" Last Changed: 2016 July 20
|
||||
" URL: https://github.com/blinskey/vim-armenian-keymaps
|
||||
|
||||
let b:keymap_name = "hy"
|
||||
|
||||
loadkeymap
|
||||
|
||||
" Capital letters
|
||||
A Ա
|
||||
P Բ
|
||||
C Գ
|
||||
T Դ
|
||||
Y Ե
|
||||
Z Զ
|
||||
E Է
|
||||
U Ը
|
||||
: Թ
|
||||
+ Ժ
|
||||
I Ի
|
||||
L Լ
|
||||
Q Խ
|
||||
? Ծ
|
||||
G Կ
|
||||
H Հ
|
||||
@ Ձ
|
||||
> Ղ
|
||||
J Ճ
|
||||
M Մ
|
||||
# Յ
|
||||
N Ն
|
||||
< Շ
|
||||
O Ո
|
||||
{ Չ
|
||||
B Պ
|
||||
} Ջ
|
||||
_ Ռ
|
||||
S Ս
|
||||
W Վ
|
||||
D Տ
|
||||
R Ր
|
||||
X Ց
|
||||
V Ւ
|
||||
\" Փ
|
||||
K Ք
|
||||
) Օ
|
||||
F Ֆ
|
||||
|
||||
" Lowercase letters
|
||||
a ա
|
||||
p բ
|
||||
c գ
|
||||
t դ
|
||||
y ե
|
||||
z զ
|
||||
e է
|
||||
u ը
|
||||
; թ
|
||||
= ժ
|
||||
i ի
|
||||
l լ
|
||||
q խ
|
||||
/ ծ
|
||||
g կ
|
||||
h հ
|
||||
2 ձ
|
||||
. ղ
|
||||
j ճ
|
||||
m մ
|
||||
3 յ
|
||||
n ն
|
||||
, շ
|
||||
o ո
|
||||
[ չ
|
||||
b պ
|
||||
] ջ
|
||||
- ռ
|
||||
s ս
|
||||
w վ
|
||||
d տ
|
||||
r ր
|
||||
x ց
|
||||
v ւ
|
||||
' փ
|
||||
k ք
|
||||
0 օ
|
||||
f ֆ
|
||||
|
||||
& և
|
||||
|
||||
" Punctuation
|
||||
` ՝
|
||||
~ ՜
|
||||
1 ։
|
||||
4 ՛
|
||||
5 ,
|
||||
6 -
|
||||
7 .
|
||||
8 «
|
||||
9 »
|
||||
\\ '
|
||||
| ՞
|
||||
|
||||
" Numbers
|
||||
! 1
|
||||
$ 3
|
||||
% 4
|
||||
^ 9
|
||||
+119
-84
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: Python
|
||||
" Maintainer: Zvezdan Petkovic <zpetkovic@acm.org>
|
||||
" Last Change: 2016 Feb 20
|
||||
" Last Change: 2016 Jul 21
|
||||
" Credits: Neil Schemenauer <nas@python.ca>
|
||||
" Dmitry Vasiliev
|
||||
"
|
||||
@@ -72,7 +72,7 @@ set cpo&vim
|
||||
" built-in below (use 'from __future__ import print_function' in 2)
|
||||
" - async and await were added in Python 3.5 and are soft keywords.
|
||||
"
|
||||
syn keyword pythonStatement False, None, True
|
||||
syn keyword pythonStatement False None True
|
||||
syn keyword pythonStatement as assert break continue del exec global
|
||||
syn keyword pythonStatement lambda nonlocal pass print return with yield
|
||||
syn keyword pythonStatement class def nextgroup=pythonFunction skipwhite
|
||||
|
||||
@@ -4,7 +4,12 @@
|
||||
" Repository: https://github.com/chrisbra/vim-sqloracle-syntax
|
||||
" License: Vim
|
||||
" Previous Maintainer: Paul Moore
|
||||
" Last Change: 2015 Nov 24
|
||||
" Last Change: 2016 Jul 22
|
||||
|
||||
" Changes:
|
||||
" 02.04.2016: Support for when keyword
|
||||
" 03.04.2016: Support for join related keywords
|
||||
" 22.07.2016: Support Oracle Q-Quote-Syntax
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
@@ -24,10 +29,11 @@ syn keyword sqlKeyword index initial initrans into is level link logging loop
|
||||
syn keyword sqlKeyword maxextents maxtrans mode modify monitoring
|
||||
syn keyword sqlKeyword nocache nocompress nologging noparallel nowait of offline on online start
|
||||
syn keyword sqlKeyword parallel successful synonym table tablespace then to trigger uid
|
||||
syn keyword sqlKeyword unique user validate values view whenever
|
||||
syn keyword sqlKeyword unique user validate values view when whenever
|
||||
syn keyword sqlKeyword where with option order pctfree pctused privileges procedure
|
||||
syn keyword sqlKeyword public resource return row rowlabel rownum rows
|
||||
syn keyword sqlKeyword session share size smallint type using
|
||||
syn keyword sqlKeyword join cross inner outer left right
|
||||
|
||||
syn keyword sqlOperator not and or
|
||||
syn keyword sqlOperator in any some all between exists
|
||||
@@ -47,8 +53,13 @@ syn keyword sqlType boolean char character date float integer long
|
||||
syn keyword sqlType mlslabel number raw rowid varchar varchar2 varray
|
||||
|
||||
" Strings:
|
||||
syn region sqlString start=+"+ skip=+\\\\\|\\"+ end=+"+
|
||||
syn region sqlString start=+'+ skip=+\\\\\|\\'+ end=+'+
|
||||
syn region sqlString matchgroup=Quote start=+"+ skip=+\\\\\|\\"+ end=+"+
|
||||
syn region sqlString matchgroup=Quote start=+'+ skip=+\\\\\|\\'+ end=+'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'\z([^[(<{]\)+ end=+\z1'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'<+ end=+>'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'{+ end=+}'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'(+ end=+)'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'\[+ end=+]'+
|
||||
|
||||
" Numbers:
|
||||
syn match sqlNumber "-\=\<\d*\.\=[0-9_]\>"
|
||||
@@ -118,6 +129,7 @@ syn keyword sqlTodo TODO FIXME XXX DEBUG NOTE contained
|
||||
|
||||
" Define the default highlighting.
|
||||
command -nargs=+ HiLink hi def link <args>
|
||||
HiLink Quote Special
|
||||
HiLink sqlComment Comment
|
||||
HiLink sqlFunction Function
|
||||
HiLink sqlKeyword sqlSpecial
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
Урок 1.5: ПРОМЯНА НА ТЕКСТ - ДОБАВЯНЕ (APPEND)
|
||||
|
||||
|
||||
** Натиснете A (Shift+a) , за да добавите текст. **
|
||||
** Натиснете A (SHIFT+a) , за да добавите текст. **
|
||||
|
||||
1. Придвижете показалеца до реда долу, означен със --->.
|
||||
Няма значение на коя буква в реда се намира показалеца.
|
||||
@@ -166,11 +166,11 @@
|
||||
Внимание! Преди да изпълните която и да е от стъпките долу, прочетете целия урок!!
|
||||
|
||||
1. Излезте от самоучителя, както направихте в Урок 1.2: :q!
|
||||
Или, ако имате достъп до друг терминал направете следното там.
|
||||
Или, ако имате достъп до друг терминал, направете следното там.
|
||||
|
||||
2. На командния ред напишете следното и натиснете <ENTER>: vim tutor <ENTER>
|
||||
'vim' е командата която стартира редактора Vim, 'tutor' е името на файла,
|
||||
които искате да промените. Използвайте файл който може да бъде променян.
|
||||
'vim' е командата, която стартира редактора Vim, 'tutor' е името на файла,
|
||||
които искате да промените. Използвайте файл който може да бъде променян.
|
||||
|
||||
3. Въвеждайте и изтривайте текст по начините, научени в предишните уроци.
|
||||
|
||||
@@ -191,10 +191,10 @@
|
||||
2. За да пуснете Vim от командния ред, напишете: vim ИМЕ-НА-ФАЙЛ <ENTER>
|
||||
|
||||
3. За да излезете от Vim, напишете:
|
||||
<ESC> :q! <ENTER> за да отхвърлите всички промени..
|
||||
<ESC> :q! <ENTER> за да отхвърлите всички промени.
|
||||
ИЛИ напишете: <ESC> :wq <ENTER> за да запишете промените.
|
||||
|
||||
4. За да изтриете буква намираща се под показалеца, натиснете: x
|
||||
4. За да изтриете буква намираща се под показалеца, натиснете: x .
|
||||
|
||||
5. За да въведете или добавите текст, натиснете:
|
||||
i въведете текста, натиснете <ESC>. Въвежда преди показалеца.
|
||||
@@ -282,11 +282,12 @@
|
||||
** Ако въведете число преди движението, то се повтаря толкова пъти
|
||||
колкото е числото. **
|
||||
|
||||
1. Придвижете показалеца до началото на реда долу , означен със --->.
|
||||
1. Придвижете показалеца до началото на реда долу, означен със --->.
|
||||
|
||||
2. Въведете 2w , за да преместите показалеца с две думи напред.
|
||||
|
||||
3. Въведете 3e , за да преместите показалеца до третата дума напред.
|
||||
3. Въведете 3e , за да преместите показалеца до края на третата дума
|
||||
напред.
|
||||
|
||||
4. Въведете 0 (нула), за да отидете в началото на реда.
|
||||
|
||||
@@ -309,10 +310,10 @@
|
||||
изтриване заедно с движение, трябва да въведете числото преди движението:
|
||||
d число движение
|
||||
|
||||
1. Придвижете показалеца до първата дума, изписана с ГОЛЕМИ БУКВИ в реда,
|
||||
1. Придвижете показалеца до първата дума, изписана с ГЛАВНИ БУКВИ в реда,
|
||||
означен със --->.
|
||||
|
||||
2. Въведете d2w , за да изтриете думите, написани с ГОЛЕМИ БУКВИ.
|
||||
2. Въведете d2w , за да изтриете думите, написани с ГЛАВНИ БУКВИ.
|
||||
|
||||
3. Повторете стъпки 1 и 2, за да изтриете последователните
|
||||
думи, изписани с големи букви с една команда.
|
||||
@@ -388,14 +389,14 @@
|
||||
движение - придвижване в текста, върху който се работи, например w (word),
|
||||
$ (до края на реда) и т.н.
|
||||
|
||||
6. За да се придвижите до началото на ред, натиснете нула - 0
|
||||
6. За да се придвижите до началото на ред, натиснете нула - 0
|
||||
|
||||
7. За да отмените предишни действия натиснете u (малка буква u)
|
||||
За да отмените всички промени на един ред въведете U (главна буква U)
|
||||
7. За да отмените предишни действия, натиснете u (малка буква u)
|
||||
За да отмените всички промени на един ред, въведете U (главна буква U)
|
||||
За да отмените отмените, натиснете CTRL-R
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Урок 3.1: КОМАНДАТА ЗА ПОСТАВЯНЕ
|
||||
Урок 3.1: КОМАНДАТА ЗА ПОСТАВЯНЕ (PUT)
|
||||
|
||||
|
||||
** Въведете p , за да поставите изтрит преди това текст след
|
||||
@@ -420,10 +421,10 @@
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Урок 3.2: КОМАНДАТА ЗА ЗАМЕСТВАНЕ
|
||||
Урок 3.2: КОМАНДАТА ЗА ЗАМЕСТВАНЕ (REPLACE)
|
||||
|
||||
|
||||
** Въведете rx , за да заместите (replace) буквата под показалеца с x . **
|
||||
** Въведете rx , за да заместите буквата под показалеца с x . **
|
||||
|
||||
1. Придвижете показалеца до първия ред, означен със ---> долу.
|
||||
|
||||
@@ -444,7 +445,7 @@
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Урок 3.3: ОПЕРАТОРЪТ ЗА ПРОМЯНА
|
||||
Урок 3.3: ОПЕРАТОРЪТ ЗА ПРОМЯНА (CHANGE)
|
||||
|
||||
|
||||
** За да промените от мястото на показалеца до края на дума, въведете ce . **
|
||||
@@ -453,11 +454,11 @@
|
||||
|
||||
2. Поставете показалеца върху з в тзии.
|
||||
|
||||
3. Въведете ce и правилнят остатък от думата ( в този случай ози).
|
||||
3. Въведете ce и правилния остатък от думата ( в този случай ози).
|
||||
|
||||
4. Натиснете <ESC> и отидете на следващата група букви, които трябва да се променят.
|
||||
|
||||
5. Повтаряйте стъпки 3 и 4 докато първото изречение стане същото като второто.
|
||||
5. Повтаряйте стъпки 3 и 4, докато първото изречение стане същото като второто.
|
||||
|
||||
---> На тзии ред иам неклико дмуи, ктоио требав да се прмнеято като се изповлза оепртореа за промяна.
|
||||
---> На този ред има няколко думи, които трябва да се променят като се използва оператора за промяна.
|
||||
@@ -499,7 +500,7 @@
|
||||
Това поставя изтрития текст СЛЕД мястото, на което се намира показалеца.
|
||||
Ако сте изтрили преди това цял ред, той ще бъде поставен като следващ ред.
|
||||
|
||||
2. За да заместите буква, намираща се под показалеца, въведете r и след
|
||||
2. За да заместите буква, намираща се под показалеца, въведете r и след
|
||||
това буквата, с която искате да заместите.
|
||||
|
||||
3. Операторът за промяна ви позволява да променяте текста от мястото на
|
||||
@@ -544,8 +545,8 @@
|
||||
|
||||
** Въведете / , последвана от фраза, за да потърсите фразата. **
|
||||
|
||||
1. В Нормален режим въведете / символа. Забележете, че / (наклонената
|
||||
черта) и показалеца се появяват в дъното на екрана, както се случва при
|
||||
1. В Нормален режим въведете знака / . Забележете, че / (наклонената
|
||||
черта) и показалецът се появяват в дъното на екрана, както се случва при
|
||||
използването на командата : .
|
||||
|
||||
2. Сега въведете 'грешшшка' <ENTER>. Това е думата, която ще търсите.
|
||||
@@ -555,7 +556,7 @@
|
||||
|
||||
4. За да търсите за фраза в обратната посока използвайте ? вместо / .
|
||||
|
||||
5. За да се върнете, там където сте били, натиснете CTRL-O (задръжте Ctrl
|
||||
5. За да се върнете, там където сте били, натиснете CTRL-O (задръжте Ctrl
|
||||
натиснат докато натискате клавиша o). Повторете, за да отидете още
|
||||
по-назад. С CTRL-I пък отивате напред.
|
||||
|
||||
@@ -580,15 +581,15 @@
|
||||
|
||||
5. Придвижете показалеца до друга (,),[,],{ или } скоба и вижте какво прави % .
|
||||
|
||||
---> Това ( ред за проверка с различни скоби като (, [ ] и { } в него. ))
|
||||
---> Това ( е ред за проверка с различни скоби като (, [ ] и { } в него. ))
|
||||
|
||||
|
||||
Забележка! Това е много полезно за откриване на грешки на програми с несъответстващи скоби.
|
||||
Забележка! Това е много полезно при откриване на грешки в програми с несъответстващи скоби.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Урок 4.4: КОМАНДАТА ЗА ЗАМЕСТВАНЕ
|
||||
Урок 4.4: КОМАНДАТА ЗА ЗАМЕСТВАНЕ (SUBSTITUTE)
|
||||
|
||||
|
||||
** Въведете :s/старо/ново/g за да заместите 'старо' със 'ново'. **
|
||||
@@ -621,8 +622,8 @@
|
||||
число G ви отвежда до съответния ред.
|
||||
gg ви отвежда до първия ред.
|
||||
|
||||
2. Ако натиснете / последвано от низ за търсене, търсите НАПРЕД.
|
||||
Ако натиснете / последвано от низ за търсене, търсите НАЗАД.
|
||||
2. Ако натиснете / , последвана от низ за търсене, търсите НАПРЕД.
|
||||
Ако натиснете / , последвана от низ за търсене, търсите НАЗАД.
|
||||
След търсене, въведете n , за да намерите следващо съвпадение с низа,
|
||||
който търсите в същата посока, в която търсите или N , за да търсите в
|
||||
обратната посока.
|
||||
@@ -644,7 +645,7 @@
|
||||
|
||||
** Въведете :! , последвано от външна команда, за да я изпълните. **
|
||||
|
||||
1. Въведете познатата ви вече : , за да поставите показалеца в дъното на
|
||||
1. Въведете познатото ви вече : , за да поставите показалеца в дъното на
|
||||
екрана. Това ви позволява да въвеждате команда.
|
||||
|
||||
2. Сега въведете ! (удивителен знак). Това ви позволява да изпълнявате
|
||||
@@ -673,11 +674,11 @@
|
||||
|
||||
3. Сега въведете :w TEST (където TEST е името на файла).
|
||||
|
||||
4. Това записва целия фаил(Самоучителя за Vim) под името TEST.
|
||||
За да проверите, напишете :!dir или :!ls отново за да видите вашата
|
||||
папка.
|
||||
4. Това записва целия файл (Самоучителя за Vim) под името TEST.
|
||||
За да проверите, напишете :!dir или :!ls отново и вижте съдържанието
|
||||
на вашата папка.
|
||||
|
||||
Забележете! Ако излезете от Vim и го пуснете отново като напишете на командния
|
||||
Забележете! Ако излезете от Vim и го пуснете отново, като напишете на командния
|
||||
ред vim TEST , файлът ще бъде точно копие на самоучителя, когато
|
||||
сте го записали.
|
||||
|
||||
@@ -686,7 +687,7 @@
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Lesson 5.3: ИЗБОР НА ТЕКСТ ЗА ЗАПИС
|
||||
Урок 5.3: ИЗБОР НА ТЕКСТ ЗА ЗАПИС
|
||||
|
||||
|
||||
** За да запишете част от файла, натиснете v , следвано от движение :w FILENAME **
|
||||
@@ -704,13 +705,13 @@
|
||||
5. Vim ще запише избраните редове във файла TEST. Използвайте :!dir или :!ls ,
|
||||
за да го видите. Не го изтривайте все още! Ще го използваме в следващия урок.
|
||||
|
||||
Забележете! Като натиснете v започвате видимо избиране (Visual selection).
|
||||
Забележете! Като натиснете v , започвате видимо избиране (Visual selection).
|
||||
Може да движите показалеца наоколо, за да направите избраното
|
||||
по-голямо или по-малко. След което, можете да използвате оператор,
|
||||
за да направите нещо с текста. Например, d изтрива текста.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Lesson 5.4: ИЗВЛИЧАНЕ И СЛИВАНЕ НА ФАЙЛОВЕ
|
||||
Урок 5.4: ИЗВЛИЧАНЕ И СЛИВАНЕ НА ФАЙЛОВЕ
|
||||
|
||||
|
||||
** За да вмъкнете съдържание на файл в текущия, въведете :r ИМЕНАФАЙЛ **
|
||||
@@ -718,9 +719,9 @@
|
||||
1. Поставете показалеца над този ред.
|
||||
|
||||
Важно! След като изпълните стъпка 2, ще видите текста от Урок 5.3. След това
|
||||
отидете НАДОЛУ за да видите този урок отново.
|
||||
отидете НАДОЛУ, за да видите този урок отново.
|
||||
|
||||
2. Сега извлечете файла TEST като използвате командата :r TEST , където TEST
|
||||
2. Сега извлечете файла TEST, като използвате командата :r TEST , където TEST
|
||||
е името на файла, което сте използвали. Файла, който извлекохте е вмъкнат
|
||||
под реда, на който се намира показалеца.
|
||||
|
||||
@@ -756,14 +757,16 @@
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Lesson 6.1: КОМАНДАТА ЗА ОТВАРЯНЕ
|
||||
Урок 6.1: КОМАНДАТА ЗА ОТВАРЯНЕ (OPEN)
|
||||
|
||||
|
||||
** Натиснете o , за да отворите ред под показалеца и да преминете в режим за въвеждане. **
|
||||
** Натиснете o , за да отворите ред под показалеца и да преминете в
|
||||
режим за въвеждане. **
|
||||
|
||||
1. Придвижете показалеца до реда долу означен със --->.
|
||||
1. Придвижете показалеца до реда долу, означен със --->.
|
||||
|
||||
2. Натиснете клавиша o , за да отворите нов ред ПОД показалеца и да преминете в режим за въвеждане.
|
||||
2. Натиснете клавиша o , за да отворите нов ред ПОД показалеца и да преминете
|
||||
в режим за въвеждане.
|
||||
|
||||
3. Сега въведете някакъв текст и натиснете <ESC> , за да излезете от режима
|
||||
за въвеждане.
|
||||
@@ -781,7 +784,7 @@
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Урок 6.2: КОМАНДАТА ЗА ДОБАВЯНЕ
|
||||
Урок 6.2: КОМАНДАТА ЗА ДОБАВЯНЕ (APPEND)
|
||||
|
||||
|
||||
** Натиснете a , за да въведете текст СЛЕД показалеца. **
|
||||
@@ -801,8 +804,8 @@
|
||||
---> Този ре ви позволява да упраж добав на тек в ред.
|
||||
---> Този ред ви позволява да упражнявате добавяне на текст в ред.
|
||||
|
||||
Важно! a, i и A всички ви отвеждат в режим за въвеждане. Единствената разлика е
|
||||
в това, къде се въвеждат знаците.
|
||||
Важно! a, i и A - с всички тях отивате в режим за въвеждане. Единствената
|
||||
разлика е в това, къде се въвеждат знаците.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Урок 6.3: ДРУГ НАЧИН ЗА ЗАМЕСТВАНЕ
|
||||
@@ -823,7 +826,8 @@
|
||||
---> Ако добавите 123 към xxx ще получите xxx.
|
||||
---> Ако добавите 123 към 456 ще получите 579.
|
||||
|
||||
Важно! Режимът за заместване е същия като режима за въвеждане, но всеки въведен знак изтрива съществуващ знак.
|
||||
Важно! Режимът за заместване е същия като режима за въвеждане, но всеки въведен
|
||||
знак изтрива съществуващ знак.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Урок 6.4: КОПИРАНЕ И ЗАМЕСТВАНЕ
|
||||
@@ -860,7 +864,7 @@
|
||||
1. Търсете 'разли' като въведете /разли <ENTER>
|
||||
Повторете няколко пъти като натискате n .
|
||||
|
||||
2. Задайте настройктата 'ic' (Ignore case) като въведете :set ic
|
||||
2. Задайте настройката 'ic' (Ignore case) като въведете :set ic
|
||||
|
||||
3.Сега търсете 'разли' отново като натискате n .
|
||||
Забележете, че сега Разлика и РАЗЛИКА също биват намерени.
|
||||
@@ -884,7 +888,8 @@
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Урок 6 ОБОБЩЕНИЕ
|
||||
|
||||
1. Натиснете o , за да отворите нов ред ПОД показалеца и да преминете в режим за въвеждане.
|
||||
1. Натиснете o , за да отворите нов ред ПОД показалеца и да преминете в
|
||||
режим за въвеждане.
|
||||
Натиснете O , за да отворите ред НАД показалеца.
|
||||
|
||||
2. Натиснете a , за да въведете текст СЛЕД показалеца.
|
||||
@@ -894,7 +899,7 @@
|
||||
|
||||
4. Операторът y взима (yank) текст, а p го поставя (paste).
|
||||
|
||||
5. Ако въведете R , докато сте в нормaлен режим, преминавате в режим за
|
||||
5. Ако въведете R , докато сте в нормален режим, преминавате в режим за
|
||||
заместване, докато натиснете <ESC>.
|
||||
|
||||
6. Ако напишете ":set xxx", задавате настройката "xxx". Ето някои настройки:
|
||||
@@ -919,9 +924,9 @@
|
||||
|
||||
Прочетете текста в прозореца за помощ, за да разберете как работи системата.
|
||||
Натиснете CTRL-W CTRL-W (два пъти CTRL-W), за да прескочите от един прозорец в друг.
|
||||
Въведете :q <ENTER> , за да затворите прозореца за помощ.
|
||||
Въведете :q <ENTER> , за да затворите прозореца за помощ.
|
||||
|
||||
Можете да намерите помощ по всякакъв въпрос като напишете
|
||||
Можете да намерите помощ по всякакъв въпрос, като напишете
|
||||
":help" именакоманда. Опитайте следните (не забравяйте да натискате <ENTER>):
|
||||
|
||||
:help w
|
||||
@@ -948,10 +953,10 @@
|
||||
3. Запишете файла с:
|
||||
:w
|
||||
|
||||
Следващият път като пуснете Vim той ще осветява текста във файловете,
|
||||
които отваряте в зависимост от синтаксиса им.
|
||||
Можете да добавите всичките си предпочитани настройки в този файл.
|
||||
За повече информация, въведете :help vimrc-intro
|
||||
Следващият път като пуснете Vim той ще осветява текста във файловете, които
|
||||
отваряте в зависимост от синтаксиса им. Можете да добавите всичките си
|
||||
предпочитани настройки в този файл. За повече информация, въведете
|
||||
:help vimrc-intro
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Урок 7.3: ДОВЪРШВАНЕ
|
||||
@@ -963,11 +968,11 @@
|
||||
|
||||
2. Вижте какви файлове има в папката ви: :!ls или :!dir
|
||||
|
||||
3. Въведете начлото на команда: :e
|
||||
3. Въведете началото на команда: :e
|
||||
|
||||
4. Натиснете CTRL-D и Vim ще ви покаже команди, започващи с "e".
|
||||
|
||||
5.Натиснете <TAB> и Vim ще допълни командата до ":edit".
|
||||
5. Натиснете <TAB> и Vim ще допълни командата до ":edit".
|
||||
|
||||
6. Сега добавете празно пространство и началото на името на съществуващ файл:
|
||||
:edit FIL
|
||||
@@ -989,12 +994,12 @@
|
||||
3. Натиснете CTRL-W CTRL-W , за да прескочите в друг прозорец.
|
||||
4. Напишете :q , за да затворите помощния прозорец.
|
||||
|
||||
5. Създайте файл за стартиране vimrc за да запазите предпочитаните от вас
|
||||
5. Създайте файл за стартиране vimrc, за да запазите предпочитаните от вас
|
||||
настройки.
|
||||
|
||||
6. Когато въвеждате команда след : , натиснете CTRL-D , за да видите
|
||||
възможностите за допълване. Натиснете <TAB> , за да използвате някоя от
|
||||
предложените възможности за допълване..
|
||||
предложените възможности за допълване.
|
||||
|
||||
|
||||
|
||||
@@ -1012,21 +1017,21 @@
|
||||
Издател: New Riders
|
||||
Това е първата книга, изцяло посветена на Vim. Особено полезна е за
|
||||
начинаещи. В нея ще намерите много примери и картинки.
|
||||
See http://iccf-holland.org/click5.html
|
||||
Вижте http://iccf-holland.org/click5.html
|
||||
|
||||
Следната книга е по-стара и по скоро за Vi отколкото за Vim, но също се препоръчва:
|
||||
Следната книга е по-стара и по-скоро за Vi отколкото за Vim, но също се препоръчва:
|
||||
Learning the Vi Editor - от Linda Lamb
|
||||
Издател: O'Reilly & Associates Inc.
|
||||
Това е книга, която ще ви запознае с почти всичко във Vi.
|
||||
Шестото издание включва и информация за Vim.
|
||||
|
||||
Този самоучител е написан от Michael C. Pierce и Robert K. Ware,
|
||||
Colorado School of Mines, акто използва идеи предоставени от Charles Smith,
|
||||
Colorado School of Mines, като използва идеи предоставени от Charles Smith,
|
||||
Colorado State University. E-mail: bware@mines.colorado.edu.
|
||||
|
||||
Променен за Vim от Bram Moolenaar.
|
||||
|
||||
Превод от Красимир Беров <berov@cpan.org>, юли 2016
|
||||
Превод от Красимир Беров <berov@cpan.org>, юли 2016.
|
||||
Този превод е подарък за сина ми Павел и е посветен на българските деца.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -2093,6 +2093,7 @@ test_arglist \
|
||||
test_filter_map \
|
||||
test_fnamemodify \
|
||||
test_glob2regpat \
|
||||
test_gn \
|
||||
test_goto \
|
||||
test_hardcopy \
|
||||
test_help_tagjump \
|
||||
|
||||
+11
-11
@@ -105,7 +105,7 @@ open_buffer(
|
||||
* If we can't create one for the current buffer, take another buffer
|
||||
*/
|
||||
close_buffer(NULL, curbuf, 0, FALSE);
|
||||
for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
|
||||
FOR_ALL_BUFFERS(curbuf)
|
||||
if (curbuf->b_ml.ml_mfp != NULL)
|
||||
break;
|
||||
/*
|
||||
@@ -1288,7 +1288,7 @@ do_buffer(
|
||||
* If deleting the last (listed) buffer, make it empty.
|
||||
* The last (listed) buffer cannot be unloaded.
|
||||
*/
|
||||
for (bp = firstbuf; bp != NULL; bp = bp->b_next)
|
||||
FOR_ALL_BUFFERS(bp)
|
||||
if (bp->b_p_bl && bp != buf)
|
||||
break;
|
||||
if (bp == NULL && buf == curbuf)
|
||||
@@ -1414,7 +1414,7 @@ do_buffer(
|
||||
buf = bp;
|
||||
if (buf == NULL) /* No loaded buffer, find listed one */
|
||||
{
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_p_bl && buf != curbuf)
|
||||
break;
|
||||
}
|
||||
@@ -2410,7 +2410,7 @@ buflist_findpat(
|
||||
#ifdef FEAT_WINDOWS
|
||||
win_T *wp;
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_buffer == buf)
|
||||
break;
|
||||
if (wp == NULL)
|
||||
@@ -2512,7 +2512,7 @@ ExpandBufnames(
|
||||
for (round = 1; round <= 2; ++round)
|
||||
{
|
||||
count = 0;
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (!buf->b_p_bl) /* skip unlisted buffers */
|
||||
continue;
|
||||
@@ -2738,7 +2738,7 @@ wininfo_other_tab_diff(wininfo_T *wip)
|
||||
|
||||
if (wip->wi_opt.wo_diff)
|
||||
{
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
/* return FALSE when it's a window in the current tab page, thus
|
||||
* the buffer was in diff mode here */
|
||||
if (wip->wi_win == wp)
|
||||
@@ -3157,7 +3157,7 @@ buflist_slash_adjust(void)
|
||||
{
|
||||
buf_T *bp;
|
||||
|
||||
for (bp = firstbuf; bp != NULL; bp = bp->b_next)
|
||||
FOR_ALL_BUFFERS(bp)
|
||||
{
|
||||
if (bp->b_ffname != NULL)
|
||||
slash_adjust(bp->b_ffname);
|
||||
@@ -4124,7 +4124,7 @@ build_stl_str_hl(
|
||||
|
||||
case STL_KEYMAP:
|
||||
fillable = FALSE;
|
||||
if (get_keymap_str(wp, tmp, TMPLEN))
|
||||
if (get_keymap_str(wp, (char_u *)"<%s>", tmp, TMPLEN))
|
||||
str = tmp;
|
||||
break;
|
||||
case STL_PAGENUM:
|
||||
@@ -5093,7 +5093,7 @@ ex_buffer_all(exarg_T *eap)
|
||||
#endif
|
||||
{
|
||||
/* Check if this buffer already has a window */
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_buffer == buf)
|
||||
break;
|
||||
/* If the buffer already has a window, move it */
|
||||
@@ -5471,7 +5471,7 @@ write_viminfo_bufferlist(FILE *fp)
|
||||
#endif
|
||||
|
||||
fputs(_("\n# Buffer list:\n"), fp);
|
||||
for (buf = firstbuf; buf != NULL ; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (buf->b_fname == NULL
|
||||
|| !buf->b_p_bl
|
||||
@@ -5857,7 +5857,7 @@ buf_delete_all_signs(void)
|
||||
{
|
||||
buf_T *buf; /* buffer we are checking for signs */
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_signlist != NULL)
|
||||
buf_delete_signs(buf);
|
||||
}
|
||||
|
||||
+9
-9
@@ -65,7 +65,7 @@ diff_buf_delete(buf_T *buf)
|
||||
int i;
|
||||
tabpage_T *tp;
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
{
|
||||
i = diff_buf_idx_tp(buf, tp);
|
||||
if (i != DB_COUNT)
|
||||
@@ -92,7 +92,7 @@ diff_buf_adjust(win_T *win)
|
||||
{
|
||||
/* When there is no window showing a diff for this buffer, remove
|
||||
* it from the diffs. */
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_buffer == win->w_buffer && wp->w_p_diff)
|
||||
break;
|
||||
if (wp == NULL)
|
||||
@@ -178,7 +178,7 @@ diff_invalidate(buf_T *buf)
|
||||
tabpage_T *tp;
|
||||
int i;
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
{
|
||||
i = diff_buf_idx_tp(buf, tp);
|
||||
if (i != DB_COUNT)
|
||||
@@ -204,7 +204,7 @@ diff_mark_adjust(
|
||||
tabpage_T *tp;
|
||||
|
||||
/* Handle all tab pages that use the current buffer in a diff. */
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
{
|
||||
idx = diff_buf_idx_tp(curbuf, tp);
|
||||
if (idx != DB_COUNT)
|
||||
@@ -591,7 +591,7 @@ diff_redraw(
|
||||
win_T *wp;
|
||||
int n;
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_p_diff)
|
||||
{
|
||||
redraw_win_later(wp, SOME_VALID);
|
||||
@@ -1198,7 +1198,7 @@ ex_diffoff(exarg_T *eap)
|
||||
int diffwin = FALSE;
|
||||
#endif
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
if (eap->forceit ? wp->w_p_diff : wp == curwin)
|
||||
{
|
||||
@@ -1879,7 +1879,7 @@ diffopt_changed(void)
|
||||
|
||||
/* If "icase" or "iwhite" was added or removed, need to update the diff. */
|
||||
if (diff_flags != diff_flags_new)
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
tp->tp_diff_invalid = TRUE;
|
||||
|
||||
diff_flags = diff_flags_new;
|
||||
@@ -2434,7 +2434,7 @@ diff_fold_update(diff_T *dp, int skip_idx)
|
||||
int i;
|
||||
win_T *wp;
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
for (i = 0; i < DB_COUNT; ++i)
|
||||
if (curtab->tp_diffbuf[i] == wp->w_buffer && i != skip_idx)
|
||||
foldUpdate(wp, dp->df_lnum[i],
|
||||
@@ -2450,7 +2450,7 @@ diff_mode_buf(buf_T *buf)
|
||||
{
|
||||
tabpage_T *tp;
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
if (diff_buf_idx_tp(buf, tp) != DB_COUNT)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
|
||||
+1
-1
@@ -4253,7 +4253,7 @@ ins_compl_get_exp(pos_T *ini)
|
||||
|
||||
if (!compl_started)
|
||||
{
|
||||
for (ins_buf = firstbuf; ins_buf != NULL; ins_buf = ins_buf->b_next)
|
||||
FOR_ALL_BUFFERS(ins_buf)
|
||||
ins_buf->b_scanned = 0;
|
||||
found_all = FALSE;
|
||||
ins_buf = curbuf;
|
||||
|
||||
+5
-4
@@ -5253,7 +5253,7 @@ garbage_collect(int testing)
|
||||
abort = abort || set_ref_in_ht(&SCRIPT_VARS(i), copyID, NULL);
|
||||
|
||||
/* buffer-local variables */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
abort = abort || set_ref_in_item(&buf->b_bufvar.di_tv, copyID,
|
||||
NULL, NULL);
|
||||
|
||||
@@ -5269,7 +5269,7 @@ garbage_collect(int testing)
|
||||
|
||||
#ifdef FEAT_WINDOWS
|
||||
/* tabpage-local variables */
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
abort = abort || set_ref_in_item(&tp->tp_winvar.di_tv, copyID,
|
||||
NULL, NULL);
|
||||
#endif
|
||||
@@ -8303,8 +8303,8 @@ find_win_by_nr(
|
||||
if (nr == 0)
|
||||
return curwin;
|
||||
|
||||
for (wp = (tp == NULL || tp == curtab) ? firstwin : tp->tp_firstwin;
|
||||
wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS_IN_TAB(tp, wp)
|
||||
{
|
||||
if (nr >= LOWEST_WIN_ID)
|
||||
{
|
||||
if (wp->w_id == nr)
|
||||
@@ -8312,6 +8312,7 @@ find_win_by_nr(
|
||||
}
|
||||
else if (--nr <= 0)
|
||||
break;
|
||||
}
|
||||
if (nr >= LOWEST_WIN_ID)
|
||||
return NULL;
|
||||
return wp;
|
||||
|
||||
+4
-4
@@ -1439,7 +1439,7 @@ find_buffer(typval_T *avar)
|
||||
{
|
||||
/* No full path name match, try a match with a URL or a "nofile"
|
||||
* buffer, these don't use the full path. */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_fname != NULL
|
||||
&& (path_with_url(buf->b_fname)
|
||||
#ifdef FEAT_QUICKFIX
|
||||
@@ -1597,7 +1597,7 @@ buf_win_common(typval_T *argvars, typval_T *rettv, int get_nr)
|
||||
++emsg_off;
|
||||
buf = get_buf_tv(&argvars[0], TRUE);
|
||||
#ifdef FEAT_WINDOWS
|
||||
for (wp = firstwin; wp; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
++winnr;
|
||||
if (wp->w_buffer == buf)
|
||||
@@ -6402,7 +6402,7 @@ f_last_buffer_nr(typval_T *argvars UNUSED, typval_T *rettv)
|
||||
int n = 0;
|
||||
buf_T *buf;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (n < buf->b_fnum)
|
||||
n = buf->b_fnum;
|
||||
|
||||
@@ -12400,7 +12400,7 @@ f_winrestcmd(typval_T *argvars UNUSED, typval_T *rettv)
|
||||
char_u buf[50];
|
||||
|
||||
ga_init2(&ga, (int)sizeof(char), 70);
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
sprintf((char *)buf, "%dresize %d|", winnr, wp->w_height);
|
||||
ga_concat(&ga, buf);
|
||||
|
||||
+6
-6
@@ -1497,7 +1497,7 @@ do_shell(
|
||||
&& !autocmd_busy
|
||||
#endif
|
||||
&& msg_silent == 0)
|
||||
for (buf = firstbuf; buf; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (bufIsChanged(buf))
|
||||
{
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
@@ -2345,7 +2345,7 @@ read_viminfo_up_to_marks(
|
||||
#endif
|
||||
|
||||
/* Change file names to buffer numbers for fmarks. */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
fmarks_check_names(buf);
|
||||
|
||||
return eof;
|
||||
@@ -3413,7 +3413,7 @@ do_wqall(exarg_T *eap)
|
||||
if (eap->cmdidx == CMD_xall || eap->cmdidx == CMD_wqall)
|
||||
exiting = TRUE;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (bufIsChanged(buf))
|
||||
{
|
||||
@@ -6115,7 +6115,7 @@ prepare_tagpreview(
|
||||
*/
|
||||
if (!curwin->w_p_pvw)
|
||||
{
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_p_pvw)
|
||||
break;
|
||||
if (wp != NULL)
|
||||
@@ -6272,7 +6272,7 @@ ex_help(exarg_T *eap)
|
||||
if (cmdmod.tab != 0)
|
||||
wp = NULL;
|
||||
else
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_buffer != NULL && wp->w_buffer->b_help)
|
||||
break;
|
||||
if (wp != NULL && wp->w_buffer->b_nwindows > 0)
|
||||
@@ -7745,7 +7745,7 @@ ex_sign(exarg_T *eap)
|
||||
if (idx == SIGNCMD_UNPLACE && *arg == NUL)
|
||||
{
|
||||
/* ":sign unplace {id}": remove placed sign by number */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if ((lnum = buf_delsign(buf, id)) != 0)
|
||||
update_debug_sign(buf, lnum);
|
||||
return;
|
||||
|
||||
+8
-8
@@ -1721,7 +1721,7 @@ autowrite_all(void)
|
||||
|
||||
if (!(p_aw || p_awa) || !p_write)
|
||||
return;
|
||||
for (buf = firstbuf; buf; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (bufIsChanged(buf) && !buf->b_p_ro)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
@@ -1764,7 +1764,7 @@ check_changed(buf_T *buf, int flags)
|
||||
int count = 0;
|
||||
|
||||
if (flags & CCGD_ALLBUF)
|
||||
for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next)
|
||||
FOR_ALL_BUFFERS(buf2)
|
||||
if (bufIsChanged(buf2)
|
||||
&& (buf2->b_ffname != NULL
|
||||
# ifdef FEAT_BROWSE
|
||||
@@ -1941,7 +1941,7 @@ dialog_changed(
|
||||
* Skip readonly buffers, these need to be confirmed
|
||||
* individually.
|
||||
*/
|
||||
for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next)
|
||||
FOR_ALL_BUFFERS(buf2)
|
||||
{
|
||||
if (bufIsChanged(buf2)
|
||||
&& (buf2->b_ffname != NULL
|
||||
@@ -1977,7 +1977,7 @@ dialog_changed(
|
||||
/*
|
||||
* mark all buffers as unchanged
|
||||
*/
|
||||
for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next)
|
||||
FOR_ALL_BUFFERS(buf2)
|
||||
unchanged(buf2, TRUE);
|
||||
}
|
||||
}
|
||||
@@ -2037,7 +2037,7 @@ check_changed_any(
|
||||
win_T *wp;
|
||||
#endif
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
++bufcount;
|
||||
|
||||
if (bufcount == 0)
|
||||
@@ -2056,13 +2056,13 @@ check_changed_any(
|
||||
add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
|
||||
|
||||
/* buf in other tab */
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
if (tp != curtab)
|
||||
for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
|
||||
add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
|
||||
#endif
|
||||
/* any other buf */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
add_bufnum(bufnrs, &bufnum, buf->b_fnum);
|
||||
|
||||
for (i = 0; i < bufnum; ++i)
|
||||
@@ -2997,7 +2997,7 @@ ex_listdo(exarg_T *eap)
|
||||
if (next_fnum < 0 || next_fnum > eap->line2)
|
||||
break;
|
||||
/* Check if the buffer still exists. */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_fnum == next_fnum)
|
||||
break;
|
||||
if (buf == NULL)
|
||||
|
||||
+13
-9
@@ -1715,7 +1715,7 @@ current_win_nr(win_T *win)
|
||||
win_T *wp;
|
||||
int nr = 0;
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
++nr;
|
||||
if (wp == win)
|
||||
@@ -1730,7 +1730,7 @@ current_tab_nr(tabpage_T *tab)
|
||||
tabpage_T *tp;
|
||||
int nr = 0;
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
{
|
||||
++nr;
|
||||
if (tp == tab)
|
||||
@@ -7290,7 +7290,7 @@ ex_close(exarg_T *eap)
|
||||
if (eap->addr_count == 0)
|
||||
ex_win_close(eap->forceit, curwin, NULL);
|
||||
else {
|
||||
for (win = firstwin; win != NULL; win = win->w_next)
|
||||
FOR_ALL_WINDOWS(win)
|
||||
{
|
||||
winnr++;
|
||||
if (winnr == eap->line2)
|
||||
@@ -7312,7 +7312,7 @@ ex_pclose(exarg_T *eap)
|
||||
{
|
||||
win_T *win;
|
||||
|
||||
for (win = firstwin; win != NULL; win = win->w_next)
|
||||
FOR_ALL_WINDOWS(win)
|
||||
if (win->w_p_pvw)
|
||||
{
|
||||
ex_win_close(eap->forceit, win, NULL);
|
||||
@@ -7432,7 +7432,7 @@ ex_tabonly(exarg_T *eap)
|
||||
* up the lists. */
|
||||
for (done = 0; done < 1000; ++done)
|
||||
{
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
if (tp->tp_topframe != topframe)
|
||||
{
|
||||
tabpage_close_other(tp, eap->forceit);
|
||||
@@ -7491,6 +7491,10 @@ tabpage_close_other(tabpage_T *tp, int forceit)
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
|
||||
redraw_tabline = TRUE;
|
||||
if (h != tabline_height())
|
||||
shell_new_rows();
|
||||
@@ -7557,7 +7561,7 @@ ex_hide(exarg_T *eap)
|
||||
int winnr = 0;
|
||||
win_T *win;
|
||||
|
||||
for (win = firstwin; win != NULL; win = win->w_next)
|
||||
FOR_ALL_WINDOWS(win)
|
||||
{
|
||||
winnr++;
|
||||
if (winnr == eap->line2)
|
||||
@@ -8705,7 +8709,7 @@ ex_syncbind(exarg_T *eap UNUSED)
|
||||
if (curwin->w_p_scb)
|
||||
{
|
||||
topline = curwin->w_topline;
|
||||
for (wp = firstwin; wp; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
if (wp->w_p_scb && wp->w_buffer)
|
||||
{
|
||||
@@ -8726,7 +8730,7 @@ ex_syncbind(exarg_T *eap UNUSED)
|
||||
/*
|
||||
* Set all scrollbind windows to the same topline.
|
||||
*/
|
||||
for (curwin = firstwin; curwin; curwin = curwin->w_next)
|
||||
FOR_ALL_WINDOWS(curwin)
|
||||
{
|
||||
if (curwin->w_p_scb)
|
||||
{
|
||||
@@ -10984,7 +10988,7 @@ makeopens(
|
||||
return FAIL;
|
||||
|
||||
/* Now put the other buffers into the buffer list */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (!(only_save_windows && buf->b_nwindows == 0)
|
||||
&& !(buf->b_help && !(ssop_flags & SSOP_HELP))
|
||||
|
||||
+4
-5
@@ -6092,7 +6092,7 @@ shorten_fnames(int force)
|
||||
char_u *p;
|
||||
|
||||
mch_dirname(dirname, MAXPATHL);
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (buf->b_fname != NULL
|
||||
#ifdef FEAT_QUICKFIX
|
||||
@@ -6691,7 +6691,7 @@ check_timestamps(
|
||||
#ifdef FEAT_GUI_MACVIM
|
||||
default_reload_choice = 0;
|
||||
#endif
|
||||
for (buf = firstbuf; buf != NULL; )
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
/* Only check buffers in a window. */
|
||||
if (buf->b_nwindows > 0)
|
||||
@@ -6710,7 +6710,6 @@ check_timestamps(
|
||||
continue;
|
||||
}
|
||||
}
|
||||
buf = buf->b_next;
|
||||
}
|
||||
#ifdef FEAT_GUI_MACVIM
|
||||
default_reload_choice = 0;
|
||||
@@ -8797,7 +8796,7 @@ ex_doautoall(exarg_T *eap)
|
||||
* gives problems when the autocommands make changes to the list of
|
||||
* buffers or windows...
|
||||
*/
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (buf->b_ml.ml_mfp != NULL)
|
||||
{
|
||||
@@ -8869,7 +8868,7 @@ aucmd_prepbuf(
|
||||
win = curwin;
|
||||
else
|
||||
#ifdef FEAT_WINDOWS
|
||||
for (win = firstwin; win != NULL; win = win->w_next)
|
||||
FOR_ALL_WINDOWS(win)
|
||||
if (win->w_buffer == buf)
|
||||
break;
|
||||
#else
|
||||
|
||||
@@ -548,6 +548,10 @@ EXTERN win_T *lastwin; /* last window */
|
||||
EXTERN win_T *prevwin INIT(= NULL); /* previous window */
|
||||
# define W_NEXT(wp) ((wp)->w_next)
|
||||
# define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
# define FOR_ALL_TABPAGES(tp) for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
# define FOR_ALL_WINDOWS_IN_TAB(tp, wp) \
|
||||
for ((wp) = ((tp) == NULL || (tp) == curtab) \
|
||||
? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next)
|
||||
/*
|
||||
* When using this macro "break" only breaks out of the inner loop. Use "goto"
|
||||
* to break out of the tabpage loop.
|
||||
@@ -561,6 +565,8 @@ EXTERN win_T *prevwin INIT(= NULL); /* previous window */
|
||||
# define lastwin curwin
|
||||
# define W_NEXT(wp) NULL
|
||||
# define FOR_ALL_WINDOWS(wp) wp = curwin;
|
||||
# define FOR_ALL_TABPAGES(tp) for (;FALSE;)
|
||||
# define FOR_ALL_WINDOWS_IN_TAB(tp, wp) wp = curwin;
|
||||
# define FOR_ALL_TAB_WINDOWS(tp, wp) wp = curwin;
|
||||
#endif
|
||||
|
||||
@@ -595,6 +601,8 @@ EXTERN buf_T *firstbuf INIT(= NULL); /* first buffer */
|
||||
EXTERN buf_T *lastbuf INIT(= NULL); /* last buffer */
|
||||
EXTERN buf_T *curbuf INIT(= NULL); /* currently active buffer */
|
||||
|
||||
#define FOR_ALL_BUFFERS(buf) for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
|
||||
/* Flag that is set when switching off 'swapfile'. It means that all blocks
|
||||
* are to be loaded into memory. Shouldn't be global... */
|
||||
EXTERN int mf_dont_release INIT(= FALSE); /* don't release blocks */
|
||||
|
||||
@@ -4130,7 +4130,7 @@ gui_drag_scrollbar(scrollbar_T *sb, long value, int still_dragging)
|
||||
{
|
||||
do_check_scrollbind(TRUE);
|
||||
/* need to update the window right here */
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_redr_type > 0)
|
||||
updateWindow(wp);
|
||||
setcursor();
|
||||
|
||||
+4
-4
@@ -633,7 +633,7 @@ Handle_KAHL_SRCH_AE(
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_ml.ml_mfp != NULL
|
||||
&& SearchData.theFile.parID == buf->b_FSSpec.parID
|
||||
&& SearchData.theFile.name[0] == buf->b_FSSpec.name[0]
|
||||
@@ -725,7 +725,7 @@ Handle_KAHL_MOD_AE(
|
||||
#endif
|
||||
|
||||
numFiles = 0;
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_ml.ml_mfp != NULL)
|
||||
{
|
||||
/* Add this file to the list */
|
||||
@@ -807,7 +807,7 @@ Handle_KAHL_GTTX_AE(
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_ml.ml_mfp != NULL)
|
||||
if (GetTextData.theFile.parID == buf->b_FSSpec.parID)
|
||||
{
|
||||
@@ -6422,7 +6422,7 @@ getTabCount(void)
|
||||
tabpage_T *tp;
|
||||
int numTabs = 0;
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
++numTabs;
|
||||
return numTabs;
|
||||
}
|
||||
|
||||
+2
-2
@@ -1402,13 +1402,13 @@ luaV_buffer(lua_State *L)
|
||||
if (lua_isnumber(L, 1)) /* by number? */
|
||||
{
|
||||
int n = lua_tointeger(L, 1);
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_fnum == n) break;
|
||||
}
|
||||
else { /* by name */
|
||||
size_t l;
|
||||
const char *s = lua_tolstring(L, 1, &l);
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (buf->b_ffname == NULL || buf->b_sfname == NULL)
|
||||
{
|
||||
|
||||
+4
-4
@@ -1916,7 +1916,7 @@ get_window_count(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED
|
||||
#ifdef FEAT_WINDOWS
|
||||
win_T *w;
|
||||
|
||||
for (w = firstwin; w != NULL; w = w->w_next)
|
||||
FOR_ALL_WINDOWS(w)
|
||||
#endif
|
||||
++n;
|
||||
return scheme_make_integer(n);
|
||||
@@ -2197,7 +2197,7 @@ get_buffer_by_num(void *data, int argc, Scheme_Object **argv)
|
||||
|
||||
fnum = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0));
|
||||
|
||||
for (buf = firstbuf; buf; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_fnum == fnum)
|
||||
return buffer_new(buf);
|
||||
|
||||
@@ -2220,7 +2220,7 @@ get_buffer_by_name(void *data, int argc, Scheme_Object **argv)
|
||||
fname = GUARANTEED_STRING_ARG(prim->name, 0);
|
||||
buffer = scheme_false;
|
||||
|
||||
for (buf = firstbuf; buf; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (buf->b_ffname == NULL || buf->b_sfname == NULL)
|
||||
/* empty string */
|
||||
@@ -2283,7 +2283,7 @@ get_buffer_count(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED
|
||||
buf_T *b;
|
||||
int n = 0;
|
||||
|
||||
for (b = firstbuf; b; b = b->b_next) ++n;
|
||||
FOR_ALL_BUFFERS(b) ++n;
|
||||
return scheme_make_integer(n);
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1534,14 +1534,14 @@ Buffers(...)
|
||||
if (GIMME == G_SCALAR)
|
||||
{
|
||||
i = 0;
|
||||
for (vimbuf = firstbuf; vimbuf; vimbuf = vimbuf->b_next)
|
||||
FOR_ALL_BUFFERS(vimbuf)
|
||||
++i;
|
||||
|
||||
XPUSHs(sv_2mortal(newSViv(i)));
|
||||
}
|
||||
else
|
||||
{
|
||||
for (vimbuf = firstbuf; vimbuf; vimbuf = vimbuf->b_next)
|
||||
FOR_ALL_BUFFERS(vimbuf)
|
||||
XPUSHs(newBUFrv(newSV(0), vimbuf));
|
||||
}
|
||||
}
|
||||
@@ -1586,7 +1586,7 @@ Windows(...)
|
||||
XPUSHs(sv_2mortal(newSViv(win_count())));
|
||||
else
|
||||
{
|
||||
for (vimwin = firstwin; vimwin != NULL; vimwin = W_NEXT(vimwin))
|
||||
FOR_ALL_WINDOWS(vimwin)
|
||||
XPUSHs(newWINrv(newSV(0), vimwin));
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -1159,7 +1159,7 @@ static VALUE buffer_s_count(void)
|
||||
buf_T *b;
|
||||
int n = 0;
|
||||
|
||||
for (b = firstbuf; b != NULL; b = b->b_next)
|
||||
FOR_ALL_BUFFERS(b)
|
||||
{
|
||||
/* Deleted buffers should not be counted
|
||||
* SegPhault - 01/07/05 */
|
||||
@@ -1175,7 +1175,7 @@ static VALUE buffer_s_aref(VALUE self UNUSED, VALUE num)
|
||||
buf_T *b;
|
||||
int n = NUM2INT(num);
|
||||
|
||||
for (b = firstbuf; b != NULL; b = b->b_next)
|
||||
FOR_ALL_BUFFERS(b)
|
||||
{
|
||||
/* Deleted buffers should not be counted
|
||||
* SegPhault - 01/07/05 */
|
||||
@@ -1426,7 +1426,7 @@ static VALUE window_s_count(void)
|
||||
win_T *w;
|
||||
int n = 0;
|
||||
|
||||
for (w = firstwin; w != NULL; w = w->w_next)
|
||||
FOR_ALL_WINDOWS(w)
|
||||
n++;
|
||||
return INT2NUM(n);
|
||||
#else
|
||||
|
||||
+2
-2
@@ -388,7 +388,7 @@ buffercmd(
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "bufNumber");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (buf->b_fnum == n)
|
||||
{
|
||||
@@ -416,7 +416,7 @@ buffercmd(
|
||||
err = TCL_ERROR;
|
||||
break;
|
||||
}
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
name = tclgetbuffer(interp, buf);
|
||||
if (name == NULL)
|
||||
|
||||
+3
-4
@@ -785,7 +785,7 @@ vim_main2(int argc UNUSED, char **argv UNUSED)
|
||||
win_T *wp;
|
||||
|
||||
/* set options in each window for "vimdiff". */
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
diff_win_options(wp, TRUE);
|
||||
}
|
||||
#endif
|
||||
@@ -1444,8 +1444,7 @@ getout(int exitval)
|
||||
for (tp = first_tabpage; tp != NULL; tp = next_tp)
|
||||
{
|
||||
next_tp = tp->tp_next;
|
||||
for (wp = (tp == curtab)
|
||||
? firstwin : tp->tp_firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS_IN_TAB(tp, wp)
|
||||
{
|
||||
if (wp->w_buffer == NULL)
|
||||
/* Autocmd must have close the buffer already, skip. */
|
||||
@@ -1468,7 +1467,7 @@ getout(int exitval)
|
||||
# endif
|
||||
|
||||
/* Trigger BufUnload for buffers that are loaded */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_ml.ml_mfp != NULL)
|
||||
{
|
||||
bufref_T bufref;
|
||||
|
||||
+2
-2
@@ -1864,7 +1864,7 @@ write_viminfo_marks(FILE *fp_out, garray_T *buflist)
|
||||
#endif
|
||||
|
||||
fputs(_("\n# History of marks within files (newest to oldest):\n"), fp_out);
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
/*
|
||||
* Only write something if buffer has been loaded and at least one
|
||||
@@ -2018,7 +2018,7 @@ copy_viminfo_marks(
|
||||
else /* fp_out != NULL */
|
||||
{
|
||||
/* This is slow if there are many buffers!! */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_ffname != NULL)
|
||||
{
|
||||
home_replace(NULL, buf->b_ffname, name_buf, LSIZE, TRUE);
|
||||
|
||||
+2
-2
@@ -796,7 +796,7 @@ mf_release(memfile_T *mfp, int page_count)
|
||||
if (mfp->mf_fd < 0 && need_release && p_uc)
|
||||
{
|
||||
/* find for which buffer this memfile is */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf->b_ml.ml_mfp == mfp)
|
||||
break;
|
||||
if (buf != NULL && buf->b_may_swap)
|
||||
@@ -861,7 +861,7 @@ mf_release_all(void)
|
||||
bhdr_T *hp;
|
||||
int retval = FALSE;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
mfp = buf->b_ml.ml_mfp;
|
||||
if (mfp != NULL)
|
||||
|
||||
+4
-4
@@ -739,7 +739,7 @@ ml_open_files(void)
|
||||
{
|
||||
buf_T *buf;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (!buf->b_p_ro || buf->b_changed)
|
||||
ml_open_file(buf);
|
||||
}
|
||||
@@ -873,7 +873,7 @@ ml_close_all(int del_file)
|
||||
{
|
||||
buf_T *buf;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
ml_close(buf, del_file && ((buf->b_flags & BF_PRESERVED) == 0
|
||||
|| vim_strchr(p_cpo, CPO_PRESERVE) == NULL));
|
||||
#ifdef FEAT_SPELL
|
||||
@@ -893,7 +893,7 @@ ml_close_notmod(void)
|
||||
{
|
||||
buf_T *buf;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (!bufIsChanged(buf))
|
||||
ml_close(buf, TRUE); /* close all not-modified buffers */
|
||||
}
|
||||
@@ -2264,7 +2264,7 @@ ml_sync_all(int check_file, int check_char)
|
||||
buf_T *buf;
|
||||
stat_T st;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (buf->b_ml.ml_mfp == NULL || buf->b_ml.ml_mfp->mf_fname == NULL)
|
||||
continue; /* no file */
|
||||
|
||||
+4
-4
@@ -2814,7 +2814,7 @@ changed_bytes(linenr_T lnum, colnr_T col)
|
||||
win_T *wp;
|
||||
linenr_T wlnum;
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_p_diff && wp != curwin)
|
||||
{
|
||||
redraw_win_later(wp, VALID);
|
||||
@@ -2924,7 +2924,7 @@ changed_lines(
|
||||
win_T *wp;
|
||||
linenr_T wlnum;
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_p_diff && wp != curwin)
|
||||
{
|
||||
redraw_win_later(wp, VALID);
|
||||
@@ -3213,7 +3213,7 @@ check_status(buf_T *buf)
|
||||
{
|
||||
win_T *wp;
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_buffer == buf && wp->w_status_height)
|
||||
{
|
||||
wp->w_redr_status = TRUE;
|
||||
@@ -9481,7 +9481,7 @@ preserve_exit(void)
|
||||
|
||||
ml_close_notmod(); /* close all not-modified buffers */
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL)
|
||||
{
|
||||
|
||||
+1
-1
@@ -2849,7 +2849,7 @@ do_check_cursorbind(void)
|
||||
* loop through the cursorbound windows
|
||||
*/
|
||||
VIsual_select = VIsual_active = 0;
|
||||
for (curwin = firstwin; curwin; curwin = curwin->w_next)
|
||||
FOR_ALL_WINDOWS(curwin)
|
||||
{
|
||||
curbuf = curwin->w_buffer;
|
||||
/* skip original window and windows with 'noscrollbind' */
|
||||
|
||||
+2
-2
@@ -473,7 +473,7 @@ nb_parse_cmd(char_u *cmd)
|
||||
{
|
||||
buf_T *buf;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
buf->b_has_sign_column = FALSE;
|
||||
|
||||
/* The IDE is breaking the connection. */
|
||||
@@ -721,7 +721,7 @@ count_changed_buffers(void)
|
||||
int n;
|
||||
|
||||
n = 0;
|
||||
for (bufp = firstbuf; bufp != NULL; bufp = bufp->b_next)
|
||||
FOR_ALL_BUFFERS(bufp)
|
||||
if (bufp->b_changed)
|
||||
++n;
|
||||
return n;
|
||||
|
||||
+1
-1
@@ -4078,7 +4078,7 @@ check_scrollbind(linenr_T topline_diff, long leftcol_diff)
|
||||
* loop through the scrollbound windows and scroll accordingly
|
||||
*/
|
||||
VIsual_select = VIsual_active = 0;
|
||||
for (curwin = firstwin; curwin; curwin = curwin->w_next)
|
||||
FOR_ALL_WINDOWS(curwin)
|
||||
{
|
||||
curbuf = curwin->w_buffer;
|
||||
/* skip original window and windows with 'noscrollbind' */
|
||||
|
||||
+6
-6
@@ -6426,7 +6426,7 @@ did_set_string_option(
|
||||
{
|
||||
buf_T *buf;
|
||||
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (buf != curbuf && *buf->b_p_cm == NUL)
|
||||
ml_set_crypt_key(buf, buf->b_p_key, oldval);
|
||||
}
|
||||
@@ -7959,7 +7959,7 @@ set_bool_option(
|
||||
char_u hash[UNDO_HASH_SIZE];
|
||||
buf_T *save_curbuf = curbuf;
|
||||
|
||||
for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
|
||||
FOR_ALL_BUFFERS(curbuf)
|
||||
{
|
||||
/* When 'undofile' is set globally: for every buffer, otherwise
|
||||
* only for the current buffer: Try to read in the undofile,
|
||||
@@ -8135,7 +8135,7 @@ set_bool_option(
|
||||
{
|
||||
win_T *win;
|
||||
|
||||
for (win = firstwin; win != NULL; win = win->w_next)
|
||||
FOR_ALL_WINDOWS(win)
|
||||
if (win->w_p_pvw && win != curwin)
|
||||
{
|
||||
curwin->w_p_pvw = FALSE;
|
||||
@@ -11823,7 +11823,7 @@ paste_option_changed(void)
|
||||
if (!old_p_paste)
|
||||
{
|
||||
/* save options for each buffer */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
buf->b_p_tw_nopaste = buf->b_p_tw;
|
||||
buf->b_p_wm_nopaste = buf->b_p_wm;
|
||||
@@ -11855,7 +11855,7 @@ paste_option_changed(void)
|
||||
* already on.
|
||||
*/
|
||||
/* set options for each buffer */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
buf->b_p_tw = 0; /* textwidth is 0 */
|
||||
buf->b_p_wm = 0; /* wrapmargin is 0 */
|
||||
@@ -11891,7 +11891,7 @@ paste_option_changed(void)
|
||||
else if (old_p_paste)
|
||||
{
|
||||
/* restore options for each buffer */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
{
|
||||
buf->b_p_tw = buf->b_p_tw_nopaste;
|
||||
buf->b_p_wm = buf->b_p_wm_nopaste;
|
||||
|
||||
+69
-48
@@ -13,16 +13,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: vim 7.4\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-03 16:10+0200\n"
|
||||
"PO-Revision-Date: 2016-02-11 14:42+0200\n"
|
||||
"POT-Creation-Date: 2016-07-16 16:34+0200\n"
|
||||
"PO-Revision-Date: 2016-07-16 16:50+0200\n"
|
||||
"Last-Translator: Antonio Colombo <azc100@gmail.com>\n"
|
||||
"Language-Team: Antonio Colombo <azc100@gmail.com>\n"
|
||||
" Vlad Sandrini <vlad.gently@gmail.com>\n"
|
||||
" Luciano Montanaro <mikelima@cirulla.net>\n"
|
||||
"Language: Italian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO_8859-1\n"
|
||||
"Content-Transfer-Encoding: 8-bit\n"
|
||||
" Vlad Sandrini <vlad.gently@gmail.com>\n"
|
||||
" Luciano Montanaro <mikelima@cirulla.net>\n"
|
||||
|
||||
msgid "E831: bf_key_init() called with empty password"
|
||||
msgstr "E831: chiamata a bf_key_init() con password nulla"
|
||||
@@ -54,6 +54,9 @@ msgstr "E82: Non riesco ad allocare alcun buffer, esco..."
|
||||
msgid "E83: Cannot allocate buffer, using other one..."
|
||||
msgstr "E83: Non riesco ad allocare un buffer, uso l'altro..."
|
||||
|
||||
msgid "E931: Buffer cannot be registered"
|
||||
msgstr "E931: Non riesco a registrare il buffer"
|
||||
|
||||
msgid "E515: No buffers were unloaded"
|
||||
msgstr "E515: Nessun buffer scaricato"
|
||||
|
||||
@@ -207,6 +210,7 @@ msgstr " riga=%ld id=%d, nome=%s"
|
||||
msgid "E902: Cannot connect to port"
|
||||
msgstr "E902: Non posso commettermi alla porta"
|
||||
|
||||
#, c-format
|
||||
msgid "E917: Cannot use a callback with %s()"
|
||||
msgstr "E917: Non posso usare callback con %s()"
|
||||
|
||||
@@ -222,6 +226,7 @@ msgstr "E920: il file _io necessita di impostare _name"
|
||||
msgid "E915: in_io buffer requires in_buf or in_name to be set"
|
||||
msgstr "E915: il buffer in_io necessita di impostare in_buf o in_name"
|
||||
|
||||
#, c-format
|
||||
msgid "E918: buffer must be loaded: %s"
|
||||
msgstr "E918: il buffer dev'essere caricato: %s"
|
||||
|
||||
@@ -582,6 +587,14 @@ msgstr "E722: Manca virgola nel Dizionario: %s"
|
||||
msgid "E723: Missing end of Dictionary '}': %s"
|
||||
msgstr "E723: Manca '}' a fine Dizionario: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "E125: Illegal argument: %s"
|
||||
msgstr "E125: Argomento non ammesso: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "E853: Duplicate argument name: %s"
|
||||
msgstr "E853: Nome argomento duplicato: %s"
|
||||
|
||||
msgid "E724: variable nested too deep for displaying"
|
||||
msgstr "E724: variabile troppo nidificata per la visualizzazione"
|
||||
|
||||
@@ -654,8 +667,8 @@ msgid "E922: expected a dict"
|
||||
msgstr "E922: aspettavo un Dizionario"
|
||||
|
||||
msgid "E923: Second argument of function() must be a list or a dict"
|
||||
msgstr "E923: Il secondo argomento di function() dev'essere una Lista"
|
||||
" o un Dizionario"
|
||||
msgstr ""
|
||||
"E923: Il secondo argomento di function() dev'essere una Lista o un Dizionario"
|
||||
|
||||
msgid ""
|
||||
"&OK\n"
|
||||
@@ -710,6 +723,7 @@ msgstr "argomento di reverse()"
|
||||
msgid "E258: Unable to send to client"
|
||||
msgstr "E258: Impossibile inviare al client"
|
||||
|
||||
#, c-format
|
||||
msgid "E927: Invalid action: '%s'"
|
||||
msgstr "E927: Azione non valida: '%s'"
|
||||
|
||||
@@ -824,14 +838,6 @@ msgstr "E124: Manca '(': %s"
|
||||
msgid "E862: Cannot use g: here"
|
||||
msgstr "E862: Non si può usare g: qui"
|
||||
|
||||
#, c-format
|
||||
msgid "E125: Illegal argument: %s"
|
||||
msgstr "E125: Argomento non ammesso: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "E853: Duplicate argument name: %s"
|
||||
msgstr "E853: Nome argomento duplicato: %s"
|
||||
|
||||
msgid "E126: Missing :endfunction"
|
||||
msgstr "E126: Manca :endfunction"
|
||||
|
||||
@@ -966,6 +972,10 @@ msgstr " FALLITO"
|
||||
msgid "E137: Viminfo file is not writable: %s"
|
||||
msgstr "E137: File viminfo \"%s\" inaccessibile in scrittura"
|
||||
|
||||
#, c-format
|
||||
msgid "E929: Too many viminfo temp files, like %s!"
|
||||
msgstr "E929: Troppi file temporanei viminfo, come %s!"
|
||||
|
||||
#, c-format
|
||||
msgid "E138: Can't write viminfo file %s!"
|
||||
msgstr "E138: Non riesco a scrivere il file viminfo %s!"
|
||||
@@ -1270,9 +1280,8 @@ msgstr "Cerco \"%s\" in \"%s\""
|
||||
msgid "Searching for \"%s\""
|
||||
msgstr "Cerco \"%s\""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "not found in '%s': \"%s\""
|
||||
msgstr "non trovato in '%s: \"%s\""
|
||||
msgstr "non trovato in '%s': \"%s\""
|
||||
|
||||
msgid "Source Vim script"
|
||||
msgstr "Esegui script Vim"
|
||||
@@ -1507,6 +1516,9 @@ msgstr ""
|
||||
msgid "E466: :winpos requires two number arguments"
|
||||
msgstr "E466: :winpos richiede due argomenti numerici"
|
||||
|
||||
msgid "E930: Cannot use :redir inside execute()"
|
||||
msgstr "E930: Non è possibile usare :redir all'interno di execute()"
|
||||
|
||||
msgid "Save Redirection"
|
||||
msgstr "Salva Redirezione"
|
||||
|
||||
@@ -1718,6 +1730,9 @@ msgstr "Espressione"
|
||||
msgid "Input Line"
|
||||
msgstr "Riga di Input"
|
||||
|
||||
msgid "Debug Line"
|
||||
msgstr "Riga di Debug"
|
||||
|
||||
msgid "E198: cmd_pchar beyond the command length"
|
||||
msgstr "E198: cmd_pchar dopo la fine del comando"
|
||||
|
||||
@@ -1974,11 +1989,6 @@ msgstr "1 carattere"
|
||||
msgid "%lld characters"
|
||||
msgstr "%lld caratteri"
|
||||
|
||||
#. Explicit typecast avoids warning on Mac OS X 10.6
|
||||
#, c-format
|
||||
msgid "%ld characters"
|
||||
msgstr "%ld caratteri"
|
||||
|
||||
msgid "[noeol]"
|
||||
msgstr "[noeol]"
|
||||
|
||||
@@ -2639,6 +2649,7 @@ msgstr "%-5s: %s%*s (Uso: %s)"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
" a: Find assignments to this symbol\n"
|
||||
" c: Find functions calling this function\n"
|
||||
" d: Find functions called by this function\n"
|
||||
" e: Find this egrep pattern\n"
|
||||
@@ -2649,6 +2660,7 @@ msgid ""
|
||||
" t: Find this text string\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
" a: Trova assegnazioni a questo simbolo\n"
|
||||
" c: Trova funzioni che chiamano questa\n"
|
||||
" d: Trova funzioni chiamate da questa\n"
|
||||
" e: Trova questa espressione egrep\n"
|
||||
@@ -2656,7 +2668,7 @@ msgstr ""
|
||||
" g: Trova questa definizione\n"
|
||||
" i: Trova file che #includono questo file\n"
|
||||
" s: Trova questo simbolo C\n"
|
||||
" t: Trova questa stringa\n"
|
||||
" t: Trova questa stringa di testo\n"
|
||||
|
||||
#, c-format
|
||||
msgid "E625: cannot open cscope database: %s"
|
||||
@@ -2961,6 +2973,10 @@ msgstr "Non posso aprire come script output: \""
|
||||
msgid "Vim: Error: Failure to start gvim from NetBeans\n"
|
||||
msgstr "Vim: Errore: Avvio di gvim da NetBeans non riuscito\n"
|
||||
|
||||
msgid "Vim: Error: This version of Vim does not run in a Cygwin terminal\n"
|
||||
msgstr "Vim: Errore: Questa versione di Vim non funziona in un"
|
||||
" terminale Cygwin\n"
|
||||
|
||||
msgid "Vim: Warning: Output is not to a terminal\n"
|
||||
msgstr "Vim: Avviso: Output non diretto a un terminale\n"
|
||||
|
||||
@@ -4262,29 +4278,27 @@ msgstr ""
|
||||
msgid "%ld Cols; "
|
||||
msgstr "%ld Col.; "
|
||||
|
||||
#, c-format
|
||||
msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
|
||||
msgstr "Selezionate %s%ld di %ld Righe; %ld di %ld Parole; %ld di %ld Caratt."
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
|
||||
"Bytes"
|
||||
msgid "Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Bytes"
|
||||
msgstr ""
|
||||
"Selezionate %s%ld di %ld Righe; %ld di %ld Parole; %ld di %ld Caratt.; %ld "
|
||||
"di %ld Byte"
|
||||
"Selezionate %s%ld di %ld Righe; %lld di %lld Parole; %lld di %lld Caratt."
|
||||
|
||||
#, c-format
|
||||
msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
|
||||
msgstr "Col. %s di %s; Riga %ld di %ld; Parola %ld di %ld; Caratt. %ld di %ld"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
|
||||
"%ld"
|
||||
"Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Chars; %lld of "
|
||||
"%lld Bytes"
|
||||
msgstr ""
|
||||
"Col. %s di %s; Riga %ld di %ld; Parola %ld di %ld; Caratt. %ld di %ld; Byte "
|
||||
"%ld di %ld"
|
||||
"Selezionate %s%ld di %ld Righe; %lld di %lld Parole; %lld di %lld Caratt.;"
|
||||
" %lld di %lld Byte"
|
||||
|
||||
msgid "Col %s of %s; Line %ld of %ld; Word %lld of %lld; Byte %lld of %lld"
|
||||
msgstr ""
|
||||
"Col. %s di %s; Riga %ld di %ld; Parola %lld di %lld; Caratt. %lld di %lld"
|
||||
|
||||
msgid ""
|
||||
"Col %s of %s; Line %ld of %ld; Word %lld of %lld; Char %lld of %lld; Byte "
|
||||
"%lld of %lld"
|
||||
msgstr ""
|
||||
"Col. %s di %s; Riga %ld di %ld; Parola %lld di %lld; Caratt. %lld di %lld;"
|
||||
" Byte %lld di %lld"
|
||||
|
||||
#, c-format
|
||||
msgid "(+%ld for BOM)"
|
||||
@@ -4541,6 +4555,7 @@ msgstr "Stampato: '%s'"
|
||||
msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
|
||||
msgstr "E244: Nome di charset non ammesso \"%s\" nel fonte di nome \"%s\""
|
||||
|
||||
#, c-format
|
||||
msgid "E244: Illegal quality name \"%s\" in font name \"%s\""
|
||||
msgstr "E244: Nome di qualità non ammesso \"%s\" nel font di nome \"%s\""
|
||||
|
||||
@@ -4579,19 +4594,14 @@ msgstr ""
|
||||
"\n"
|
||||
"Non posso impostare il contesto di sicurezza per "
|
||||
|
||||
#, c-format
|
||||
msgid "Could not set security context %s for %s"
|
||||
msgstr "Non posso impostare il contesto di sicurezza %s per %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not get security context %s for %s. Removing it!"
|
||||
msgstr "Non posso ottenere il contesto di sicurezza %s per %s. Lo rimuovo!"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
"Cannot execute shell "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Non riesco a eseguire shell "
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
"Cannot execute shell sh\n"
|
||||
@@ -4620,6 +4630,13 @@ msgstr ""
|
||||
"\n"
|
||||
"Non riesco ad effettuare 'fork'\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
"Cannot execute shell "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Non riesco a eseguire shell "
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
"Command terminated\n"
|
||||
@@ -4717,6 +4734,7 @@ msgstr "E376: %%%c non valido nel prefisso della stringa di 'format'"
|
||||
msgid "E377: Invalid %%%c in format string"
|
||||
msgstr "E377: %%%c non valido nella stringa di 'format'"
|
||||
|
||||
#. nothing found
|
||||
msgid "E378: 'errorformat' contains no pattern"
|
||||
msgstr "E378: 'errorformat' non contiene alcun modello"
|
||||
|
||||
@@ -6649,6 +6667,7 @@ msgstr "E764: opzione '%s' non impostata"
|
||||
msgid "E850: Invalid register name"
|
||||
msgstr "E850: Nome registro non valido"
|
||||
|
||||
#, c-format
|
||||
msgid "E919: Directory not found in '%s': \"%s\""
|
||||
msgstr "E919: Directory non trovata in '%s': \"%s\""
|
||||
|
||||
@@ -6895,6 +6914,7 @@ msgstr ""
|
||||
msgid "unable to convert %s to vim dictionary"
|
||||
msgstr "impossibile convertire %s a dizionario vim"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to convert %s to vim list"
|
||||
msgstr "impossibile convertire %s a Lista vim"
|
||||
|
||||
@@ -6926,3 +6946,4 @@ msgid ""
|
||||
msgstr ""
|
||||
"Impostazione di percorso non riuscita: sys.path non è una lista\n"
|
||||
"Dovresti aggiungere vim.VIM_SPECIAL_PATH a sys.path"
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ void win_redraw_last_status(frame_T *frp);
|
||||
void win_redr_status_matches(expand_T *xp, int num_matches, char_u **matches, int match, int showtail);
|
||||
void win_redr_status(win_T *wp);
|
||||
int stl_connected(win_T *wp);
|
||||
int get_keymap_str(win_T *wp, char_u *buf, int len);
|
||||
int get_keymap_str(win_T *wp, char_u *fmt, char_u *buf, int len);
|
||||
void screen_putchar(int c, int row, int col, int attr);
|
||||
void screen_getbytes(int row, int col, char_u *bytes, int *attrp);
|
||||
void screen_puts(char_u *text, int row, int col, int attr);
|
||||
|
||||
+1
-1
@@ -2040,7 +2040,7 @@ qf_jump(
|
||||
if (cmdmod.tab != 0)
|
||||
wp = NULL;
|
||||
else
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_buffer != NULL && wp->w_buffer->b_help)
|
||||
break;
|
||||
if (wp != NULL && wp->w_buffer->b_nwindows > 0)
|
||||
|
||||
+12
-11
@@ -730,7 +730,7 @@ update_screen(int type)
|
||||
#ifdef FEAT_WINDOWS
|
||||
/* Reset b_mod_set flags. Going through all windows is probably faster
|
||||
* than going through all buffers (there could be many buffers). */
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
wp->w_buffer->b_mod_set = FALSE;
|
||||
#else
|
||||
curbuf->b_mod_set = FALSE;
|
||||
@@ -962,7 +962,7 @@ update_debug_sign(buf_T *buf, linenr_T lnum)
|
||||
update_prepare();
|
||||
|
||||
# ifdef FEAT_WINDOWS
|
||||
for (wp = firstwin; wp; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
if (wp->w_redr_type != 0)
|
||||
win_update(wp);
|
||||
@@ -6282,7 +6282,7 @@ status_redraw_all(void)
|
||||
{
|
||||
win_T *wp;
|
||||
|
||||
for (wp = firstwin; wp; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_status_height)
|
||||
{
|
||||
wp->w_redr_status = TRUE;
|
||||
@@ -6298,7 +6298,7 @@ status_redraw_curbuf(void)
|
||||
{
|
||||
win_T *wp;
|
||||
|
||||
for (wp = firstwin; wp; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_status_height != 0 && wp->w_buffer == curbuf)
|
||||
{
|
||||
wp->w_redr_status = TRUE;
|
||||
@@ -6314,7 +6314,7 @@ redraw_statuslines(void)
|
||||
{
|
||||
win_T *wp;
|
||||
|
||||
for (wp = firstwin; wp; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_redr_status)
|
||||
win_redr_status(wp);
|
||||
if (redraw_tabline)
|
||||
@@ -6778,7 +6778,7 @@ win_redr_status(win_T *wp)
|
||||
screen_fill(row, row + 1, len + W_WINCOL(wp),
|
||||
this_ru_col + W_WINCOL(wp), fillchar, fillchar, attr);
|
||||
|
||||
if (get_keymap_str(wp, NameBuff, MAXPATHL)
|
||||
if (get_keymap_str(wp, (char_u *)"<%s>", NameBuff, MAXPATHL)
|
||||
&& (int)(this_ru_col - len) > (int)(STRLEN(NameBuff) + 1))
|
||||
screen_puts(NameBuff, row, (int)(this_ru_col - STRLEN(NameBuff)
|
||||
- 1 + W_WINCOL(wp)), attr);
|
||||
@@ -6873,6 +6873,7 @@ stl_connected(win_T *wp)
|
||||
int
|
||||
get_keymap_str(
|
||||
win_T *wp,
|
||||
char_u *fmt, /* format string containing one %s item */
|
||||
char_u *buf, /* buffer for the result */
|
||||
int len) /* length of buffer */
|
||||
{
|
||||
@@ -6905,9 +6906,7 @@ get_keymap_str(
|
||||
#endif
|
||||
p = (char_u *)"lang";
|
||||
}
|
||||
if ((int)(STRLEN(p) + 3) < len)
|
||||
sprintf((char *)buf, "<%s>", p);
|
||||
else
|
||||
if (vim_snprintf((char *)buf, len, (char *)fmt, p) > len - 1)
|
||||
buf[0] = NUL;
|
||||
#ifdef FEAT_EVAL
|
||||
vim_free(s);
|
||||
@@ -10195,7 +10194,9 @@ showmode(void)
|
||||
MSG_PUTS_ATTR(_(" Arabic"), attr);
|
||||
else
|
||||
# endif
|
||||
MSG_PUTS_ATTR(_(" (lang)"), attr);
|
||||
if (get_keymap_str(curwin, (char_u *)" (%s)",
|
||||
NameBuff, MAXPATHL))
|
||||
MSG_PUTS_ATTR(NameBuff, attr);
|
||||
}
|
||||
#endif
|
||||
if ((State & INSERT) && p_paste)
|
||||
@@ -10388,7 +10389,7 @@ draw_tabline(void)
|
||||
else
|
||||
#endif
|
||||
{
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
++tabcount;
|
||||
|
||||
tabwidth = (Columns - 1 + tabcount / 2) / tabcount;
|
||||
|
||||
+20
-7
@@ -4728,7 +4728,7 @@ current_search(
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if the pattern is one character or zero-width.
|
||||
* Check if the pattern is one character long or zero-width.
|
||||
* If move is TRUE, check from the beginning of the buffer, else from the
|
||||
* current cursor position.
|
||||
* Returns TRUE, FALSE or -1 for failure.
|
||||
@@ -4743,10 +4743,15 @@ is_one_char(char_u *pattern, int move)
|
||||
int save_called_emsg = called_emsg;
|
||||
int flag = 0;
|
||||
|
||||
if (pattern == NULL)
|
||||
pattern = spats[last_idx].pat;
|
||||
|
||||
if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
|
||||
SEARCH_KEEP, ®match) == FAIL)
|
||||
return -1;
|
||||
|
||||
/* init startcol correctly */
|
||||
regmatch.startpos[0].col = -1;
|
||||
/* move to match */
|
||||
if (move)
|
||||
clearpos(&pos)
|
||||
@@ -4757,22 +4762,30 @@ is_one_char(char_u *pattern, int move)
|
||||
flag = SEARCH_START;
|
||||
}
|
||||
|
||||
if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
|
||||
if (searchit(curwin, curbuf, &pos, FORWARD, pattern, 1,
|
||||
SEARCH_KEEP + flag, RE_SEARCH, 0, NULL) != FAIL)
|
||||
{
|
||||
/* Zero-width pattern should match somewhere, then we can check if
|
||||
* start and end are in the same position. */
|
||||
called_emsg = FALSE;
|
||||
nmatched = vim_regexec_multi(®match, curwin, curbuf,
|
||||
pos.lnum, (colnr_T)0, NULL);
|
||||
do
|
||||
{
|
||||
regmatch.startpos[0].col++;
|
||||
nmatched = vim_regexec_multi(®match, curwin, curbuf,
|
||||
pos.lnum, regmatch.startpos[0].col, NULL);
|
||||
if (!nmatched)
|
||||
break;
|
||||
} while (regmatch.startpos[0].col < pos.col);
|
||||
|
||||
if (!called_emsg)
|
||||
{
|
||||
result = (nmatched != 0
|
||||
&& regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
|
||||
&& regmatch.startpos[0].col == regmatch.endpos[0].col);
|
||||
|
||||
if (!result && inc(&pos) >= 0 && pos.col == regmatch.endpos[0].col)
|
||||
result = TRUE;
|
||||
/* one char width */
|
||||
if (!result && inc(&pos) >= 0 && pos.col == regmatch.endpos[0].col)
|
||||
result = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
called_emsg |= save_called_emsg;
|
||||
|
||||
+2
-2
@@ -2875,7 +2875,7 @@ spell_free_all(void)
|
||||
buf_T *buf;
|
||||
|
||||
/* Go through all buffers and handle 'spelllang'. <VN> */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
ga_clear(&buf->b_s.b_langp);
|
||||
|
||||
while (first_lang != NULL)
|
||||
@@ -2911,7 +2911,7 @@ spell_reload(void)
|
||||
spell_free_all();
|
||||
|
||||
/* Go through all buffers and handle 'spelllang'. */
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
/* Only load the wordlists when 'spelllang' is set and there is a
|
||||
* window for this buffer in which 'spell' is set. */
|
||||
|
||||
+1
-1
@@ -1913,7 +1913,7 @@ set_termname(char_u *term)
|
||||
* loaded.
|
||||
*/
|
||||
set_bufref(&old_curbuf, curbuf);
|
||||
for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
|
||||
FOR_ALL_BUFFERS(curbuf)
|
||||
{
|
||||
if (curbuf->b_ml.ml_mfp != NULL)
|
||||
apply_autocmds(EVENT_TERMCHANGED, NULL, NULL, FALSE,
|
||||
|
||||
@@ -171,6 +171,7 @@ NEW_TESTS = test_arglist.res \
|
||||
test_cscope.res \
|
||||
test_digraph.res \
|
||||
test_farsi.res \
|
||||
test_gn.res \
|
||||
test_hardcopy.res \
|
||||
test_history.res \
|
||||
test_increment.res \
|
||||
|
||||
@@ -4,8 +4,6 @@ Note that the end-of-line moves the cursor to the next test line.
|
||||
|
||||
Also test match() and matchstr()
|
||||
|
||||
Also test the gn command and repeating it.
|
||||
|
||||
STARTTEST
|
||||
:so small.vim
|
||||
/^start:/
|
||||
@@ -53,35 +51,6 @@ dit
|
||||
:put =match('abc', '\zs', 2, 1) " 2
|
||||
:put =match('abc', '\zs', 3, 1) " 3
|
||||
:put =match('abc', '\zs', 4, 1) " -1
|
||||
/^foobar
|
||||
gncsearchmatch/one\_s*two\_s
|
||||
:1
|
||||
gnd
|
||||
/[a]bcdx
|
||||
:1
|
||||
2gnd/join
|
||||
/$
|
||||
0gnd
|
||||
/\>\zs
|
||||
0gnd/^
|
||||
gnd$h/\zs
|
||||
gnd/[u]niquepattern/s
|
||||
vlgnd
|
||||
/mother
|
||||
:set selection=exclusive
|
||||
$cgNmongoose/i
|
||||
cgnj
|
||||
:" Make sure there is no other match y uppercase.
|
||||
/x59
|
||||
gggnd
|
||||
:" test repeating dgn
|
||||
/^Johnny
|
||||
ggdgn.
|
||||
:" test repeating gUgn
|
||||
/^Depp
|
||||
gggUgn.
|
||||
gg/a:0\@!\zs\d\+
|
||||
nygnop
|
||||
:/^start:/,/^end:/wq! test.out
|
||||
ENDTEST
|
||||
|
||||
@@ -103,32 +72,4 @@ innertext object
|
||||
</b>
|
||||
</begin>
|
||||
SEARCH:
|
||||
foobar
|
||||
one
|
||||
two
|
||||
abcdx | abcdx | abcdx
|
||||
join
|
||||
lines
|
||||
zero width pattern
|
||||
delete first and last chars
|
||||
uniquepattern uniquepattern
|
||||
my very excellent mother just served us nachos
|
||||
for (i=0; i<=10; i++)
|
||||
a:10
|
||||
|
||||
a:1
|
||||
|
||||
a:20
|
||||
Y
|
||||
text
|
||||
Y
|
||||
--1
|
||||
Johnny
|
||||
--2
|
||||
Johnny
|
||||
--3
|
||||
Depp
|
||||
--4
|
||||
Depp
|
||||
--5
|
||||
end:
|
||||
|
||||
@@ -42,30 +42,4 @@ a
|
||||
3
|
||||
-1
|
||||
SEARCH:
|
||||
searchmatch
|
||||
abcdx | | abcdx
|
||||
join lines
|
||||
zerowidth pattern
|
||||
elete first and last char
|
||||
uniquepattern
|
||||
my very excellent mongoose just served us nachos
|
||||
for (j=0; i<=10; i++)
|
||||
a:10
|
||||
|
||||
a:1
|
||||
1
|
||||
|
||||
a:20
|
||||
|
||||
text
|
||||
Y
|
||||
--1
|
||||
|
||||
--2
|
||||
|
||||
--3
|
||||
DEPP
|
||||
--4
|
||||
DEPP
|
||||
--5
|
||||
end:
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
" Test for gn command
|
||||
|
||||
func Test_gn_command()
|
||||
noa new
|
||||
" replace a single char by itsself quoted:
|
||||
call setline('.', 'abc x def x ghi x jkl')
|
||||
let @/='x'
|
||||
exe "norm! cgn'x'\<esc>.."
|
||||
call assert_equal("abc 'x' def 'x' ghi 'x' jkl", getline('.'))
|
||||
sil! %d_
|
||||
" simple search match
|
||||
call setline('.', 'foobar')
|
||||
let @/='foobar'
|
||||
exe "norm! gncsearchmatch"
|
||||
call assert_equal('searchmatch', getline('.'))
|
||||
sil! %d _
|
||||
" replace a multi-line match
|
||||
call setline('.', ['', 'one', 'two'])
|
||||
let @/='one\_s*two\_s'
|
||||
exe "norm! gnceins\<CR>zwei"
|
||||
call assert_equal(['','eins','zwei'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" test count argument
|
||||
call setline('.', ['', 'abcdx | abcdx | abcdx'])
|
||||
let @/='[a]bcdx'
|
||||
exe "norm! 2gnd"
|
||||
call assert_equal(['','abcdx | | abcdx'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" join lines
|
||||
call setline('.', ['join ', 'lines'])
|
||||
let @/='$'
|
||||
exe "norm! 0gnd"
|
||||
call assert_equal(['join lines'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" zero-width match
|
||||
call setline('.', ['', 'zero width pattern'])
|
||||
let @/='\>\zs'
|
||||
exe "norm! 0gnd"
|
||||
call assert_equal(['', 'zerowidth pattern'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" delete first and last chars
|
||||
call setline('.', ['delete first and last chars'])
|
||||
let @/='^'
|
||||
exe "norm! 0gnd$"
|
||||
let @/='\zs'
|
||||
exe "norm! gnd"
|
||||
call assert_equal(['elete first and last char'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" using visual mode
|
||||
call setline('.', ['', 'uniquepattern uniquepattern'])
|
||||
exe "norm! /[u]niquepattern/s\<cr>vlgnd"
|
||||
call assert_equal(['', ' uniquepattern'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" backwards search
|
||||
call setline('.', ['my very excellent mother just served us nachos'])
|
||||
let @/='mother'
|
||||
exe "norm! $cgNmongoose"
|
||||
call assert_equal(['my very excellent mongoose just served us nachos'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" search for single char
|
||||
call setline('.', ['','for (i=0; i<=10; i++)'])
|
||||
let @/='i'
|
||||
exe "norm! cgnj"
|
||||
call assert_equal(['','for (j=0; i<=10; i++)'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" search hex char
|
||||
call setline('.', ['','Y'])
|
||||
set noignorecase
|
||||
let @/='\%x59'
|
||||
exe "norm! gnd"
|
||||
call assert_equal(['',''], getline(1,'$'))
|
||||
sil! %d _
|
||||
" test repeating gdn
|
||||
call setline('.', ['', '1', 'Johnny', '2', 'Johnny', '3'])
|
||||
let @/='Johnny'
|
||||
exe "norm! dgn."
|
||||
call assert_equal(['','1', '', '2', '', '3'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" test repeating gUgn
|
||||
call setline('.', ['', '1', 'Depp', '2', 'Depp', '3'])
|
||||
let @/='Depp'
|
||||
exe "norm! gUgn."
|
||||
call assert_equal(['', '1', 'DEPP', '2', 'DEPP', '3'], getline(1,'$'))
|
||||
sil! %d _
|
||||
" test using look-ahead assertions
|
||||
call setline('.', ['a:10', '', 'a:1', '', 'a:20'])
|
||||
let @/='a:0\@!\zs\d\+'
|
||||
exe "norm! 2nygno\<esc>p"
|
||||
call assert_equal(['a:10', '', 'a:1', '1', '', 'a:20'], getline(1,'$'))
|
||||
sil! %d _
|
||||
endfu
|
||||
|
||||
" vim: tabstop=2 shiftwidth=0 expandtab
|
||||
@@ -773,6 +773,14 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2102,
|
||||
/**/
|
||||
2101,
|
||||
/**/
|
||||
2100,
|
||||
/**/
|
||||
2099,
|
||||
/**/
|
||||
2098,
|
||||
/**/
|
||||
|
||||
+22
-29
@@ -209,7 +209,7 @@ newwindow:
|
||||
|
||||
/* cursor to preview window */
|
||||
case 'P':
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_p_pvw)
|
||||
break;
|
||||
if (wp == NULL)
|
||||
@@ -1372,7 +1372,7 @@ win_valid(win_T *win)
|
||||
|
||||
if (win == NULL)
|
||||
return FALSE;
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp == win)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
@@ -1387,7 +1387,7 @@ win_count(void)
|
||||
win_T *wp;
|
||||
int count = 0;
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
++count;
|
||||
return count;
|
||||
}
|
||||
@@ -3717,7 +3717,7 @@ valid_tabpage(tabpage_T *tpc)
|
||||
{
|
||||
tabpage_T *tp;
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
if (tp == tpc)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
@@ -4017,7 +4017,7 @@ tabpage_move(int nr)
|
||||
first_tabpage = curtab->tp_next;
|
||||
else
|
||||
{
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
if (tp->tp_next == curtab)
|
||||
break;
|
||||
if (tp == NULL) /* "cannot happen" */
|
||||
@@ -4096,7 +4096,7 @@ win_find_nr(int winnr)
|
||||
win_T *wp;
|
||||
|
||||
# ifdef FEAT_WINDOWS
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (--winnr == 0)
|
||||
break;
|
||||
return wp;
|
||||
@@ -4117,9 +4117,7 @@ win_find_tabpage(win_T *win)
|
||||
win_T *wp;
|
||||
tabpage_T *tp;
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
for (wp = (tp == curtab ? firstwin : tp->tp_firstwin);
|
||||
wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_TAB_WINDOWS(tp, wp)
|
||||
if (wp == win)
|
||||
return tp;
|
||||
return NULL;
|
||||
@@ -4409,7 +4407,7 @@ buf_jump_open_win(buf_T *buf)
|
||||
wp = curwin;
|
||||
# ifdef FEAT_WINDOWS
|
||||
else
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_buffer == buf)
|
||||
break;
|
||||
if (wp != NULL)
|
||||
@@ -4433,7 +4431,7 @@ buf_jump_open_tab(buf_T *buf)
|
||||
if (wp != NULL)
|
||||
return wp;
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
if (tp != curtab)
|
||||
{
|
||||
for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
|
||||
@@ -4612,7 +4610,7 @@ win_free(
|
||||
|
||||
if (prevwin == wp)
|
||||
prevwin = NULL;
|
||||
for (ttp = first_tabpage; ttp != NULL; ttp = ttp->tp_next)
|
||||
FOR_ALL_TABPAGES(ttp)
|
||||
if (ttp->tp_prevwin == wp)
|
||||
ttp->tp_prevwin = NULL;
|
||||
}
|
||||
@@ -4625,7 +4623,7 @@ win_free(
|
||||
|
||||
/* Remove the window from the b_wininfo lists, it may happen that the
|
||||
* freed memory is re-used for another window. */
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
|
||||
if (wip->wi_win == wp)
|
||||
wip->wi_win = NULL;
|
||||
@@ -4868,7 +4866,7 @@ win_size_save(garray_T *gap)
|
||||
|
||||
ga_init2(gap, (int)sizeof(int), 1);
|
||||
if (ga_grow(gap, win_count() * 2) == OK)
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
((int *)gap->ga_data)[gap->ga_len++] =
|
||||
wp->w_width + wp->w_vsep_width;
|
||||
@@ -4893,7 +4891,7 @@ win_size_restore(garray_T *gap)
|
||||
for (j = 0; j < 2; ++j)
|
||||
{
|
||||
i = 0;
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]);
|
||||
win_setheight_win(((int *)gap->ga_data)[i++], wp);
|
||||
@@ -5389,7 +5387,7 @@ win_setminheight(void)
|
||||
{
|
||||
/* TODO: handle vertical splits */
|
||||
room = -p_wh;
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
room += wp->w_height - p_wmh;
|
||||
if (room >= 0)
|
||||
break;
|
||||
@@ -6354,7 +6352,7 @@ min_rows(void)
|
||||
|
||||
#ifdef FEAT_WINDOWS
|
||||
total = 0;
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
{
|
||||
n = frame_minheight(tp->tp_topframe, NULL);
|
||||
if (total < n)
|
||||
@@ -6384,7 +6382,7 @@ only_one_window(void)
|
||||
if (first_tabpage->tp_next != NULL)
|
||||
return FALSE;
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp->w_buffer != NULL
|
||||
&& (!((wp->w_buffer->b_help && !curbuf->b_help)
|
||||
# ifdef FEAT_QUICKFIX
|
||||
@@ -7101,7 +7099,7 @@ win_getid(typval_T *argvars)
|
||||
tabpage_T *tp;
|
||||
int tabnr = get_tv_number(&argvars[1]);
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
if (--tabnr == 0)
|
||||
break;
|
||||
if (tp == NULL)
|
||||
@@ -7122,9 +7120,7 @@ win_gotoid(typval_T *argvars)
|
||||
tabpage_T *tp;
|
||||
int id = get_tv_number(&argvars[0]);
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
for (wp = tp == curtab ? firstwin : tp->tp_firstwin;
|
||||
wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_TAB_WINDOWS(tp, wp)
|
||||
if (wp->w_id == id)
|
||||
{
|
||||
goto_tabpage_win(tp, wp);
|
||||
@@ -7142,10 +7138,9 @@ win_id2tabwin(typval_T *argvars, list_T *list)
|
||||
int tabnr = 1;
|
||||
int id = get_tv_number(&argvars[0]);
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
{
|
||||
for (wp = tp == curtab ? firstwin : tp->tp_firstwin;
|
||||
wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS_IN_TAB(tp, wp)
|
||||
{
|
||||
if (wp->w_id == id)
|
||||
{
|
||||
@@ -7169,7 +7164,7 @@ win_id2win(typval_T *argvars)
|
||||
int nr = 1;
|
||||
int id = get_tv_number(&argvars[0]);
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
{
|
||||
if (wp->w_id == id)
|
||||
return nr;
|
||||
@@ -7185,9 +7180,7 @@ win_findbuf(typval_T *argvars, list_T *list)
|
||||
tabpage_T *tp;
|
||||
int bufnr = get_tv_number(&argvars[0]);
|
||||
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
for (wp = tp == curtab ? firstwin : tp->tp_firstwin;
|
||||
wp != NULL; wp = wp->w_next)
|
||||
FOR_ALL_TAB_WINDOWS(tp, wp)
|
||||
if (wp->w_buffer->b_fnum == bufnr)
|
||||
list_append_number(list, wp->w_id);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1319,7 +1319,7 @@ get_window(
|
||||
{
|
||||
win_T *wp = NULL; /* window filename is in */
|
||||
|
||||
for (wp = firstwin; wp != NULL; wp = W_NEXT(wp))
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (buf == wp->w_buffer)
|
||||
break;
|
||||
return wp;
|
||||
|
||||
Reference in New Issue
Block a user