updated for version 7.0209
This commit is contained in:
@ -71,6 +71,7 @@ DOCS = \
|
||||
pattern.txt \
|
||||
pi_gzip.txt \
|
||||
pi_netrw.txt \
|
||||
pi_paren.txt \
|
||||
pi_spec.txt \
|
||||
pi_tar.txt \
|
||||
pi_zip.txt \
|
||||
@ -196,6 +197,7 @@ HTMLS = \
|
||||
pattern.html \
|
||||
pi_gzip.html \
|
||||
pi_netrw.html \
|
||||
pi_paren.html \
|
||||
pi_spec.html \
|
||||
print.html \
|
||||
quickfix.html \
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
*autocmd.txt* For Vim version 7.0aa. Last change: 2006 Feb 20
|
||||
*autocmd.txt* For Vim version 7.0aa. Last change: 2006 Feb 27
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -471,6 +471,8 @@ CursorHoldI Just like CursorHold, but in Insert mode.
|
||||
|
||||
*CursorMoved*
|
||||
CursorMoved After the cursor was moved in Normal mode.
|
||||
Also when the text of the cursor line has been
|
||||
changed, e.g., with "x", "rx" or "p".
|
||||
Not triggered when there is typeahead or when
|
||||
an operator is pending.
|
||||
For an example see |match-parens|.
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
*eval.txt* For Vim version 7.0aa. Last change: 2006 Feb 26
|
||||
*eval.txt* For Vim version 7.0aa. Last change: 2006 Feb 27
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -3361,12 +3361,6 @@ match({expr}, {pat}[, {start}[, {count}]]) *match()*
|
||||
"\c" to the pattern to ignore case: >
|
||||
:let idx = match(haystack, '\cneedle')
|
||||
<
|
||||
When {count} is given use the {count}'th match. When a match
|
||||
is found in a String the search for the next one starts on
|
||||
character further. Thus this example results in 1: >
|
||||
echo match("testing", "..", 0, 2)
|
||||
< In a |List| the search continues in the next item.
|
||||
|
||||
If {start} is given, the search starts from byte index
|
||||
{start} in a String or item {start} in a |List|.
|
||||
The result, however, is still the index counted from the
|
||||
@ -3377,11 +3371,19 @@ match({expr}, {pat}[, {start}[, {count}]]) *match()*
|
||||
< result is again "4". >
|
||||
:echo match("testing", "t", 2)
|
||||
< result is "3".
|
||||
For a String, if {start} > 0 then it is like the string starts
|
||||
{start} bytes later, thus "^" will match there.
|
||||
For a String, if {start} < 0, it will be set to 0. For a list
|
||||
the index is counted from the end.
|
||||
If {start} is out of range (> strlen({expr} for a String or
|
||||
> len({expr} for a |List|) -1 is returned.
|
||||
|
||||
When {count} is given use the {count}'th match. When a match
|
||||
is found in a String the search for the next one starts on
|
||||
character further. Thus this example results in 1: >
|
||||
echo match("testing", "..", 0, 2)
|
||||
< In a |List| the search continues in the next item.
|
||||
|
||||
See |pattern| for the patterns that are accepted.
|
||||
The 'ignorecase' option is used to set the ignore-caseness of
|
||||
the pattern. 'smartcase' is NOT used. The matching is always
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
*gui.txt* For Vim version 7.0aa. Last change: 2006 Feb 21
|
||||
*gui.txt* For Vim version 7.0aa. Last change: 2006 Feb 27
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -24,9 +24,9 @@ Other GUI documentation:
|
||||
1. Starting the GUI *gui-start* *E229* *E233*
|
||||
|
||||
First you must make sure you actually have a version of Vim with the GUI code
|
||||
included. You can check this with the ":version" command, it should include
|
||||
"+GUI_Athena", "+GUI_GTK", "+GUI_KDE", "+GUI_Motif" or "MS-Windows ... bit
|
||||
GUI version".
|
||||
included. You can check this with the ":version" command, it says "with xxx
|
||||
GUI", where "xxx" is X11-Motif, X11-Athena, Photon, GTK, GTK2, etc., or
|
||||
"MS-Windows 32 bit GUI version".
|
||||
|
||||
How to start the GUI depends on the system used. Mostly you can run the
|
||||
GUI version of Vim with:
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
*help.txt* For Vim version 7.0aa. Last change: 2006 Feb 18
|
||||
*help.txt* For Vim version 7.0aa. Last change: 2006 Feb 27
|
||||
|
||||
VIM - main help file
|
||||
k
|
||||
@ -187,9 +187,11 @@ Remarks about specific systems ~
|
||||
|os_win32.txt| MS-Windows 95/98/NT
|
||||
*standard-plugin-list*
|
||||
Standard plugins ~
|
||||
|pi_netrw.txt| Reading and writing files over a network
|
||||
|pi_gzip.txt| Reading and writing compressed files
|
||||
|pi_expl.txt| File explorer
|
||||
|pi_netrw.txt| Reading and writing files over a network
|
||||
|pi_paren.txt| Highlight matching parens
|
||||
|pi_tar.txt| Tar file explorer
|
||||
|pi_zip.txt| Zip archive explorer
|
||||
|
||||
LOCAL ADDITIONS: *local-additions*
|
||||
|
||||
|
||||
@ -581,7 +581,7 @@ function find_tag2() {
|
||||
ntags=split(atag,blata,"[ ]");
|
||||
if ( ntags > 1 ) { return; }
|
||||
if ( ( allow_one_char == "no" ) && \
|
||||
( index("!#$%\&'()+,-./0:;=?@ACINX\\[\\]^_`at\\{\\}~",atag) !=0 ) ) {
|
||||
( index("!#$%&'()+,-./0:;=?@ACINX\\[\\]^_`at\\{\\}~",atag) !=0 ) ) {
|
||||
return;
|
||||
}
|
||||
if ( skip_word[atag] == "yes" ) { return; }
|
||||
@ -610,7 +610,7 @@ function find_tag3() {
|
||||
ntags=split(btag,blata,"[ ]");
|
||||
if ( ntags > 1 ) { return; }
|
||||
if ( ( allow_one_char == "no" ) && \
|
||||
( index("!#$%\&'()+,-./0:;=?@ACINX\\[\\]^_`at\\{\\}~",btag) !=0 ) ) {
|
||||
( index("!#$%&'()+,-./0:;=?@ACINX\\[\\]^_`at\\{\\}~",btag) !=0 ) ) {
|
||||
return;
|
||||
}
|
||||
if ( skip_word[btag] == "yes" ) { return; }
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
*options.txt* For Vim version 7.0aa. Last change: 2006 Feb 26
|
||||
*options.txt* For Vim version 7.0aa. Last change: 2006 Feb 27
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -4639,7 +4639,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
{only available when compiled with the |+linebreak|
|
||||
feature}
|
||||
Minimal number of columns to use for the line number. Only relevant
|
||||
when the 'number' option is set or printint lines with a line number.
|
||||
when the 'number' option is set or printing lines with a line number.
|
||||
Since one space is always between the number and the text, there is
|
||||
one less character for the number itself.
|
||||
The value is the minimum width. A bigger width is used when needed to
|
||||
|
||||
42
runtime/doc/pi_paren.txt
Normal file
42
runtime/doc/pi_paren.txt
Normal file
@ -0,0 +1,42 @@
|
||||
*pi_paren.txt* For Vim version 7.0aa. Last change: 2006 Feb 27
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
|
||||
|
||||
Highlighting matching parens *matchparen*
|
||||
|
||||
The functionality mentioned here is a |standard-plugin|.
|
||||
This plugin is only available if 'compatible' is not set.
|
||||
|
||||
You can avoid loading this plugin by setting the "loaded_matchparen" variable: >
|
||||
:let loaded_matchparen = 1
|
||||
|
||||
The plugin installs CursorMoved autocommands to redefine the match
|
||||
highlighting.
|
||||
|
||||
To disable the plugin after it was loaded use this command: >
|
||||
|
||||
:NoMatchParen
|
||||
|
||||
And to enable it again: >
|
||||
|
||||
:DoMatchParen
|
||||
|
||||
The highlighting used is ParenMatch. You can specify different colors with
|
||||
the ":highlight" command. Example: >
|
||||
|
||||
:hi ParenMatch ctermbg=blue guibg=lightblue
|
||||
|
||||
The characters to be matched come from the 'matchpairs' option. You can
|
||||
change the value to highlight different matches. Note that not everything is
|
||||
possible. For example, you can't highlight single or double quotes, because
|
||||
the start and end are equal.
|
||||
|
||||
The syntax highlighting attributes are used. When the cursor currently is not
|
||||
in a string or comment syntax item, then matches inside string and comment
|
||||
syntax items are ignored. Any syntax items with "string" or "comment"
|
||||
somewhere in their name are considered string or comment items.
|
||||
|
||||
==============================================================================
|
||||
vim:tw=78:ts=8:ft=help:norl:
|
||||
@ -5920,6 +5920,7 @@ match-parens tips.txt /*match-parens*
|
||||
matchend() eval.txt /*matchend()*
|
||||
matchit-install usr_05.txt /*matchit-install*
|
||||
matchlist() eval.txt /*matchlist()*
|
||||
matchparen pi_paren.txt /*matchparen*
|
||||
matchstr() eval.txt /*matchstr()*
|
||||
max() eval.txt /*max()*
|
||||
mbyte-IME mbyte.txt /*mbyte-IME*
|
||||
@ -6180,6 +6181,7 @@ new-items-7 version7.txt /*new-items-7*
|
||||
new-line-continuation version5.txt /*new-line-continuation*
|
||||
new-location-list version7.txt /*new-location-list*
|
||||
new-manpage-trans version7.txt /*new-manpage-trans*
|
||||
new-matchparen version7.txt /*new-matchparen*
|
||||
new-multi-byte version5.txt /*new-multi-byte*
|
||||
new-multi-lang version6.txt /*new-multi-lang*
|
||||
new-netrw-explore version7.txt /*new-netrw-explore*
|
||||
@ -6318,6 +6320,7 @@ php3.vim syntax.txt /*php3.vim*
|
||||
phtml.vim syntax.txt /*phtml.vim*
|
||||
pi_gzip.txt pi_gzip.txt /*pi_gzip.txt*
|
||||
pi_netrw.txt pi_netrw.txt /*pi_netrw.txt*
|
||||
pi_paren.txt pi_paren.txt /*pi_paren.txt*
|
||||
pi_spec.txt pi_spec.txt /*pi_spec.txt*
|
||||
plugin usr_05.txt /*plugin*
|
||||
plugin-details filetype.txt /*plugin-details*
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
*todo.txt* For Vim version 7.0aa. Last change: 2006 Feb 26
|
||||
*todo.txt* For Vim version 7.0aa. Last change: 2006 Feb 27
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -30,11 +30,8 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
|
||||
*known-bugs*
|
||||
-------------------- Known bugs and current work -----------------------
|
||||
|
||||
Script ID is only remembered for global options. Should remember it for every
|
||||
local option separately.
|
||||
Change PV_XXX values in separate ranges for buffer and window.
|
||||
Move the enums to option.h so that the size is known in structs.h
|
||||
use array for each window and buffer with scriptID values.
|
||||
test 49 fails because of the function line numbering now taking care of
|
||||
continuation lines.
|
||||
|
||||
Crash with X command server (Ciaran McCreesh).
|
||||
|
||||
@ -43,7 +40,6 @@ maintanance.
|
||||
|
||||
"fsutil hardlink" can create a hard link on an NTFS file system. (Daniel
|
||||
Einspanjer) What library function can detect that?
|
||||
|
||||
Win32: use GetFileInformationByHandle() to detect hard links on NTFS?
|
||||
(George Reilly)
|
||||
|
||||
@ -90,9 +86,6 @@ spelling:
|
||||
adding a bad word like "zw" would. Use "zuw" to undo "zw"? (Antonio
|
||||
Colombo)
|
||||
|
||||
An error in a function uses a line number that doesn't take line continuation
|
||||
into account. (Mikolaj Machowski) Store line count in an extra array?
|
||||
|
||||
Is it possible to keep the command-line window open? Would actually work like
|
||||
closing it, executing the command and re-opening it (at the same position).
|
||||
|
||||
@ -1603,7 +1596,7 @@ Syntax highlighting:
|
||||
"%" match. :syntax nomatch cMatchError (,{,[,),},] [contained]
|
||||
8 Highlight the text between two matching parens (e.g., with a grey
|
||||
background) when on one of the parens or in between them.
|
||||
Or highlight the matching paren when the cursor is on one.
|
||||
Option for the matchparen plugin?
|
||||
8 Add a command to jump to the next character highlighted with "Error".
|
||||
8 When using a cterm, and no ctermfg or ctermbg are defined, use start/stop
|
||||
sequences. Add remark in docs that :if 'term' == "term-name" should be
|
||||
@ -1796,17 +1789,16 @@ Built-in script language:
|
||||
specified in any way? To be able to jump to the last edited file.
|
||||
8 Pass the executable name to the Vim scripts in some way. As v:argv0?
|
||||
8 Add command arguments with three dashes, passed on to Vim scripts.
|
||||
8 When starting to source a vim script, delete all functions that it has
|
||||
previously defined? Avoids using ":fun!" all the time.
|
||||
7 Add optional arguments to user functions:
|
||||
:func myFunc(arg1, arg2, arg3 = "blah", arg4 = 17)
|
||||
6 User functions: Functions local to buffer "b:func()"?
|
||||
8 Add ":let var[{expr}] = {expr}". When past the end of "var" just ignore.
|
||||
8 For Strings add ":let var[{expr}] = {expr}". When past the end of "var"
|
||||
just ignore.
|
||||
8 The "= register should be writable, if followed by the name of a variable,
|
||||
option or environment variable.
|
||||
8 ":let &option" should list the value of the option.
|
||||
7 Add synIDlist(), making the whole list of syntax items on the
|
||||
stack available (separated with '\n').
|
||||
7 Add synIDlist(), making the whole list of syntax items on the syntax stack
|
||||
available as a List.
|
||||
8 Add autocommand-event for when a variable is changed:
|
||||
:au VarChanged {varname} {commands}
|
||||
8 Add "has("gui_capable")", to check if the GUI can be started.
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
*version7.txt* For Vim version 7.0aa. Last change: 2006 Feb 26
|
||||
*version7.txt* For Vim version 7.0aa. Last change: 2006 Feb 27
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -23,6 +23,7 @@ Spell checking |new-spell|
|
||||
Omni completion |new-omni-completion|
|
||||
MzScheme interface |new-MzScheme|
|
||||
Printing multi-byte text |new-print-multi-byte|
|
||||
Highlighting matching parens |new-matchparen|
|
||||
Translated manual pages |new-manpage-trans|
|
||||
Internal grep |new-vimgrep|
|
||||
Scroll back in messages |new-scroll-back|
|
||||
@ -227,6 +228,16 @@ The 'printmbcharset' and 'printmbfont' options are used for this.
|
||||
Also see |postscript-cjk-printing|. (Mike Williams)
|
||||
|
||||
|
||||
Highlighting matching parens *new-matchparen*
|
||||
----------------------------
|
||||
|
||||
When moving the cursor through the text and it is on a paren, then the
|
||||
matching paren can be highlighted. This uses the new |CursorMoved|
|
||||
autocommand event.
|
||||
|
||||
See |pi_paren.txt| for more information.
|
||||
|
||||
|
||||
Translated manual pages *new-manpage-trans*
|
||||
-----------------------
|
||||
|
||||
@ -1767,4 +1778,17 @@ the end of every line only up to the length of the last line was counted.
|
||||
|
||||
"dip" in trailing empty lines left one empty line behind.
|
||||
|
||||
The script ID was only remembered globally for each option. When a buffer- or
|
||||
window-local option was set the same "last set" location was changed for all
|
||||
buffers and windows. Now remember the script ID for each local option
|
||||
separately.
|
||||
|
||||
GUI: The "Replace All" button didn't handle backslashes in the replacement in
|
||||
the same way as "Replace". Escape backslashes so that they are taken
|
||||
literally.
|
||||
|
||||
An error in a function reported a line number that doesn't take line
|
||||
continuation into account. Now store a NULL for continuation lines, so that
|
||||
the index is equal to the line number in the sourced file.
|
||||
|
||||
vim:tw=78:ts=8:ft=help:norl:
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2006 Feb 25
|
||||
" Last Change: 2006 Feb 27
|
||||
|
||||
" Listen very carefully, I will say this only once
|
||||
if exists("did_load_filetypes")
|
||||
@ -1658,19 +1658,29 @@ au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex
|
||||
au BufNewFile,BufRead *.tex call s:FTtex()
|
||||
|
||||
fun! s:FTtex()
|
||||
let n = 1
|
||||
while n < 10 && n < line("$")
|
||||
let line = getline(n)
|
||||
if line =~ '^\s*\\\%(documentclass\>\|usepackage\>\|begin{\)'
|
||||
setf tex
|
||||
return
|
||||
elseif line =~ '^\s*\\\%(start\l\+\|setup\l\+\|usemodule\|enablemode\>\|enableregime\>\|setvariables\>\|useencoding\>\|usesymbols\>\|stel\l\+\|verwende\l\+\|stel\l\+\|gebruik\l\+\|usa\l\+\|imposta\l\+\|regle\l\+\|utilisemodule\>\)\>'
|
||||
setf context
|
||||
return
|
||||
let lnum = 1
|
||||
let checked = 0
|
||||
while checked < 25 && lnum < line("$")
|
||||
let line = getline(lnum)
|
||||
if line !~ '^\s*%'
|
||||
if line =~ '^\s*\\\%(documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>\)'
|
||||
setf tex
|
||||
return
|
||||
elseif line =~ '^\s*\\\%(start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\)\>'
|
||||
setf context
|
||||
return
|
||||
endif
|
||||
let checked = checked + 1
|
||||
endif
|
||||
let n = n + 1
|
||||
let lnum = lnum + 1
|
||||
endwhile
|
||||
setf tex
|
||||
|
||||
" Didn't recognize anything, guess.
|
||||
if exists("g:tex_flavour") && g:tex_flavour == "context"
|
||||
setf context
|
||||
else
|
||||
setf tex
|
||||
endif
|
||||
endfun
|
||||
|
||||
" Context
|
||||
|
||||
106
runtime/plugin/matchparen.vim
Normal file
106
runtime/plugin/matchparen.vim
Normal file
@ -0,0 +1,106 @@
|
||||
" Vim plugin for showing matching parens
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2006 Feb 27
|
||||
|
||||
" Exit quickly when:
|
||||
" - this plugin was already loaded (or disabled)
|
||||
" - when 'compatible' is set
|
||||
" - the "CursorMoved" autocmd event is not availble.
|
||||
if exists("g:loaded_matchparen") || &cp || !exists("##CursorMoved")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_matchparen = 1
|
||||
|
||||
augroup matchparen
|
||||
" Replace all matchparen autocommands
|
||||
autocmd! CursorMoved,CursorMovedI * call s:Highlight_Matching_Pair()
|
||||
augroup END
|
||||
|
||||
let s:paren_hl_on = 0
|
||||
|
||||
" Skip the rest if it was already done.
|
||||
if exists("*s:Highlight_Matching_Pair")
|
||||
finish
|
||||
endif
|
||||
|
||||
" The function that is invoked (very often) to define a ":match" highlighting
|
||||
" for any matching paren.
|
||||
function! s:Highlight_Matching_Pair()
|
||||
" Remove any previous match.
|
||||
if s:paren_hl_on
|
||||
match none
|
||||
let s:paren_hl_on = 0
|
||||
endif
|
||||
|
||||
" Get the character under the cursor and check if it's in 'matchpairs'.
|
||||
let c_lnum = line('.')
|
||||
let c_col = col('.')
|
||||
let before = 0
|
||||
|
||||
let c = getline(c_lnum)[c_col - 1]
|
||||
let plist = split(&matchpairs, ':\|,')
|
||||
let i = index(plist, c)
|
||||
if i < 0
|
||||
" not found, in Insert mode try character before the cursor
|
||||
if c_col > 1 && (mode() == 'i' || mode() == 'R')
|
||||
let before = 1
|
||||
let c = getline(c_lnum)[c_col - 2]
|
||||
let i = index(plist, c)
|
||||
endif
|
||||
if i < 0
|
||||
" not found, nothing to do
|
||||
return
|
||||
endif
|
||||
endif
|
||||
|
||||
" Figure out the arguments for searchpairpos().
|
||||
" Restrict the search to visible lines with "stopline".
|
||||
if i % 2 == 0
|
||||
let s_flags = 'nW'
|
||||
let c2 = plist[i + 1]
|
||||
let stopline = line('w$')
|
||||
else
|
||||
let s_flags = 'nbW'
|
||||
let c2 = c
|
||||
let c = plist[i - 1]
|
||||
let stopline = line('w0')
|
||||
endif
|
||||
if c == '['
|
||||
let c = '\['
|
||||
let c2 = '\]'
|
||||
endif
|
||||
|
||||
" When not in a string or comment ignore matches inside them.
|
||||
let s_skip ='synIDattr(synID(c_lnum, c_col - before, 0), "name") ' .
|
||||
\ '=~? "string\\|comment"'
|
||||
execute 'if' s_skip '| let s_skip = 0 | endif'
|
||||
|
||||
" Find the match. When it was just before the cursor move it there for a
|
||||
" moment. To restore the cursor position use "N|" and when 'virtualedit'
|
||||
" is set, cursor() otherwise.
|
||||
if before > 0
|
||||
if &ve != ''
|
||||
let vcol = virtcol('.')
|
||||
endif
|
||||
call cursor(c_lnum, c_col - before)
|
||||
endif
|
||||
let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
|
||||
if before > 0
|
||||
if &ve != ''
|
||||
exe 'normal ' . vcol . '|'
|
||||
else
|
||||
call cursor(0, c_col)
|
||||
endif
|
||||
endif
|
||||
|
||||
" If a match is found setup match highlighting.
|
||||
if m_lnum > 0 && m_lnum >= line('w0') && m_lnum <= line('w$')
|
||||
exe 'match MatchParen /\(\%' . c_lnum . 'l\%' . (c_col - before) .
|
||||
\ 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/'
|
||||
let s:paren_hl_on = 1
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Define commands that will disable and enable the plugin.
|
||||
command! NoMatchParen match none | unlet! g:loaded_matchparen | au! matchparen
|
||||
command! DoMatchParen runtime plugin/matchparen.vim | doau CursorMoved
|
||||
Reference in New Issue
Block a user