Nvim の :help
ページは、生成されたもので、ソースをtree-sitter-vimdocパーサーを使って処理しています。
CTRL-F
(挿入されない)を入力した場合、"o" <CR>
をどこかに入力した場合、または "o" コマンド(挿入モードではない!)を使用した場合、"O" "O"コマンド(挿入モードではない!)を使用した場合、"e" 行の先頭で "else" の2番目の 'e' を入力した場合。CTRL-F
がこのデフォルトキーです。CTRL-I
は<Tab>
のASCIIコードであるため、これにCTRL-I
を定義する場合は注意してください。* キーの前に "*" が付いている場合、Vimはキーを挿入する前にその行を再インデントします。 'cinkeys'に"*<Return>"が含まれている場合、Vimは新しい行を開く前に現在の行を再インデントします。0 キーの前にゼロ(ただし "!" または "*" の後に表示される)が付いている場合、Vimはそのキーが行に入力した最初の文字である場合にのみ、その行を再インデントします。 "=" の前に使用する場合、行の前に空白文字しかない場合にのみ、その行を再インデントします。CTRL-F
です。o "o" コマンドを使用した場合、またはVimが現在の行の下に新しい行を開いた場合(例:挿入モードで<Enter>
を入力した場合)に行を再インデントします。O "O" コマンドを使用した場合に行を再インデントします。e 2番目の 'e' を入力したときに、"else" で始まる行を再インデントします。: ラベルまたはcaseステートメントの後に ":" が入力された場合、行を再インデントします。C++の "class::method" の ":" の場合は再インデントしないでください。すべての ":" に対して再インデントするには、"<:>" を使用します。=word 「word」の最後の文字を入力するときに再インデントします。「word」は実際には別の単語の一部である可能性があります。したがって、"=end" は "endif" または "endwhile" の "d" を入力すると再インデントされます。ただし、"bend" を入力するときは再インデントされません。また、補完によって「word」で始まる単語が生成された場合も再インデントされます。"0=word" は、単語の前に空白文字しかない場合に再インデントします。=~word =word と同様ですが、大文字と小文字を区別しません。<Enter>
を押すたびにインデントするのではなく、<Tab>
を押した場合のみインデントするemacsスタイルのインデントモードの場合、次を推奨します。:set cinkeys=0{,0},:,0#,!<Tab>,!^Fまた、'autoindent'をオフにすることもできます。
<BS>
、<Tab>
、または<Space>
を入力したり、CTRL-T
またはCTRL-D
を使用したりしてインデントを変更した後、vimが再インデントするのを防ぎます。if (cond) if (cond) if (cond) { { { foo; foo; foo; } } }
if (cond) { if (cond) { if (cond) { foo; foo; foo; } } } else else else { { { bar; bar; bar; } } }
if (cond) if (cond) if (cond) foo; foo; foo; else else else { { { bar; bar; bar; } } }
func() func() func() { { { int foo; int foo; int foo;
if (cond) if (cond) if (cond) { { { foo; foo; foo;
if (cond) if (cond) if (cond) { { { foo; foo; foo; } } }
func() func() func() { { { if (cond) if (cond) if (cond) { { { a = b; a = b; a = b; } } } } } }
func() func() func() { { { { { { stmt; stmt; stmt; LABEL: LABEL: LABEL: } } } } } }
switch (x) switch(x) { { case 1: case 1: a = b; a = b; default: default: } }
case 11: case 11: a = a + 1; a = a + 1; b = b + 1;
switch (a) { switch (a) { case 1: { case 1: { break; break; } }
switch (x) switch(x) { { case 1: case 1: a = b; a = b; break; break; default: default: a = 0; a = 0; break; break; } }
{ { public: public: a = b; a = b; private: private: } }
public: public: a = a + 1; a = a + 1; b = b + 1;
namespace { namespace { void function(); void function(); } } namespace my namespace my { { void function(); void function(); } }
extern "C" { extern "C" { void function(); void function(); } } extern "C" extern "C" { { void function(); void function(); } }
func(a, b) func(a, b) func(a, b) int a; int a; int a; char b; char b; char b;
int int int func() func() func()
class MyClass : class MyClass : public BaseClass public BaseClass {} {} MyClass::MyClass() : MyClass::MyClass() : BaseClass(3) BaseClass(3) {} {}
a = b + 9 * a = b + 9 * c; c;
/* /* text. text. */ */
/******** /******** text. text. ********/ ********/
a = b; a = b; /* comment */ /* comment */ c = d; c = d;
if (c1 && (c2 || if (c1 && (c2 || c3)) c3)) foo; foo; if (c1 && if (c1 && (c2 || c3)) (c2 || c3)) { {
if (c123456789 if (c123456789 && (c22345 && (c22345 || c3)) || c3))
c = c1 && c = c1 && ( ( c2 || c2 || c3 c3 ) && c4; ) && c4;
if ( c1 if ( c1 && ( c2 && ( c2 || c3)) || c3)) foo; foo;
a_long_line( a_long_line( argument, argument, argument); argument); a_short_line(argument, a_short_line(argument, argument); argument);
if (condition1 if (condition1 && condition2) && condition2) action(); action(); function(argument1 function(argument1 && argument2); && argument2);
c = c1 && ( c = c1 && ( c2 || c2 || c3 c3 ) && c4; ) && c4; if ( if ( c1 && c2 c1 && c2 ) ) foo; foo;
if (cond1 && if (cond1 && cond2 cond2 ) )
object.add(new ChangeListener() { public void stateChanged(ChangeEvent e) { do_something(); } });
var bar = { foo: { that: this, some: ok, }, "bar":{ a : 2, b: "123abc", x: 4, "y": 5 } }
*N
Vim は、最大 N 行離れた位置にある未閉じのコメントを検索します。これにより、コメントの開始を検索するのに必要な時間が制限されます。/* */
コメントが N 行後にインデントを停止する場合は、変更する値になります (デフォルト 70 行)。cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,E0,ps,ts,is,+s, c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0,P0Vim は、次の場合は行を 1 列目に配置します。
searchpairpos()
の最大スキャン距離を設定します。値が大きいほど、非常に長い形式を扱う場合のパフォーマンスが低下しますが、正確性が向上します。値 0 は、制限なしにスキャンします。デフォルトは 300 です。(defn bad [] "Incorrect indentation") (defn good [] "Correct indentation")
" Default let g:clojure_fuzzy_indent = 1 let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let'] let g:clojure_fuzzy_indent_blacklist = \ ['-fn$', '\v^with-%(meta|out-str|loading-context)$']
"^foo"
のようなパターンは、foobar
、my.ns/foobar
、および #'foobar
のすべての候補と一致します。" Default let g:clojure_special_indent_words = \ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
(def default "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.") (def aligned "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.")
(foo bar baz)
1
に設定すると、この動作が変更され、すべてのサブフォームが同じ列に揃えられ、clojure-mode.elのデフォルトの動作をエミュレートします。(foo bar baz)
let fortran_do_enddo=1この場合、doループはインデントされます。たとえば、.f90ファイルでのみすべてのループがdo/enddo型である場合は、次のようなautocommandでバッファフラグを設定する必要があります。
au! BufRead,BufNewFile *.f90 let b:fortran_do_enddo=1これにより、.f90ファイルではdoループがインデントされ、.forなどの他の拡張子を持つFortranファイルではインデントされません。
let fortran_indent_less=1より細かいレベルの制御は、次のように対応するバッファローカル変数を設定することで実現できます。
let b:fortran_indent_less=1
<script>
および<style>
"blocktags" の後の最初の行のインデントを設定できます(デフォルトは"zero")。:let g:html_indent_script1 = "inc" :let g:html_indent_style1 = "inc"
<tag
行の後の属性のインデントを設定できます。:let g:html_indent_attribute = 1
<tag
よりも1インデントステップ多い 2 自動インデント、2インデントステップ(デフォルト) > 2 自動インデント、さらに多くのインデントステップ:let g:html_indent_inctags = "html,body,head,tbody"次のタグを削除することもできます。
:let g:html_indent_autotags = "th,td,tr,tfoot,thead"両方の変数のデフォルト値は空です。注:最初の「inctags」はVimセッションごとに1回だけ定義されます。
:call HtmlIndent_CheckUserSettings()詳細:「エイリアン」コンテンツを含む「blocktags」内のインデントの計算
<script>
: {カスタマイズ可能}
ブロックの最初の行の場合 : cindent(v:lnum) 属性が空の場合または"java"を含む場合 : -1 それ以外の場合(vbscript、tclなど) <style>
: {カスタマイズ可能}
ブロックの最初の行の場合 : GetCSSIndent() それ以外の場合 <!-- --> : -1:let g:MATLAB_function_indent = {0, 1 or 2 (default)}ここで、0はClassic、1はネストされた関数をインデント、2はすべての関数をインデントです。
:%s /\r$//gまたは、単に変数PHP_removeCRwhenUnixを1に設定すると、VimがPHPファイルをロードするとき(各BufRead時)、スクリプトはそれらを黙って削除します。
:let g:PHP_autoformatcomment = 0そうでない場合、「t」が'formatoptions'文字列から削除され、「qrowcb」が追加されます。詳細については、fo-tableを参照してください。
:let g:PHP_outdentSLComments = NNは、追加する'shiftwidth'の数です。
# Comment // Comment /* Comment */
:let g:PHP_default_indenting = Nたとえば、N = 1の場合、次のようになります。
<?php if (!isset($History_lst_sel)) if (!isset($History_lst_sel)) if (!isset($History_lst_sel)) { $History_lst_sel=0; } else $foo="bar"; $command_hist = TRUE; ?>(PHPコンテナマーカーとコードの間の追加のインデントに注意してください)
:let g:PHP_outdentphpescape = 0
:let g:PHP_BracesAtCodeLevel = 1これにより、次の結果が得られます。
if ($foo) { foo(); }代わりに
if ($foo) { foo(); }注:このオプションを使用すると、いくつかの最適化が利用できなくなるため、インデントが少し遅くなります。
:let g:PHP_vintage_case_default_indent = 1PHPでは、中括弧は「case/default」ブロック内では必須ではないため、「case:」および「default:」は、「switch()」と同じレベルでインデントされ、意味のないインデントを回避します。上記のオプションを使用すると、従来の方法に戻ることができます。
$user_name_very_long->name() ->age() ->info();
:let g:PHP_noArrowMatching = 1
$user_name_very_long->name() ->age() ->info();
let g:PHP_IndentFunctionCallParameters = 1関数呼び出しの引数は、1レベル追加でインデントされます。2スペースのインデントの場合
function call_the_thing( $with_this, $and_that ) { $this->do_the_thing( $with_this, $and_that ); }
let g:PHP_IndentFunctionDeclarationParameters = 1
function call_the_thing( $with_this, $and_that ) { $this->do_the_thing( $with_this, $and_that ); }
g:python_indent
Dictionaryで設定できます。これは項目を追加する前に作成する必要があります。let g:python_indent = {}指定された例はデフォルトです。辞書の値は式に設定されているため、これらの値を更新せずに後で'shiftwidth'の値を変更できることに注意してください。
let g:python_indent.open_paren = 'shiftwidth() * 2'ネストされた括弧の後のインデント
let g:python_indent.nested_paren = 'shiftwidth()'継続行のインデント
let g:python_indent.continue = 'shiftwidth() * 2'デフォルトでは、複数行構造の閉じ括弧は、前の行の最初の空白文字以外の文字の下に整列されます。複数行構造を開始する行の最初の文字の下に揃えたい場合は、このキーをリセットします。
let g:python_indent.closed_paren_align_last_line = v:falseこのメソッドは、searchpair()を使用して、閉じられていない括弧を探します。これは遅くなる可能性があるため、150ミリ秒後にタイムアウトします。インデントが正しくないことに気付いた場合は、より大きなタイムアウト(ミリ秒単位)を設定できます。
let g:python_indent.searchpair_timeout = 500閉じられていない括弧を探すのが遅すぎる場合、特にコピー&ペースト操作中や、複数行の括弧内でのインデントが必要ない場合は、この機能を完全に無効にすることができます。
let g:python_indent.disable_parentheses_indenting = 1下位互換性のために、これらの変数もサポートされています。
g:pyindent_open_paren g:pyindent_nested_paren g:pyindent_continue g:pyindent_searchpair_timeout g:pyindent_disable_parentheses_indentingR ft-r-indent
let r_indent_align_args = 0
let r_indent_ess_comments = 1
let r_indent_comment_column = 30
let r_indent_ess_compatible = 1
### r_indent_ess_compatible = 1 ### r_indent_ess_compatible = 0 foo <- foo <- function(x) function(x) { { paste(x) paste(x) } }
'\(&\||\|+\|-\|\*\|/\|=\|\~\|%\|->\)\s*$'
に一致する行の後にインデントされます。異なるパターンに一致する行の後にインデントしたい場合は、vimrcでr_indent_op_pattern
の適切な値を設定する必要があります。let b:verilog_indent_modules = 1すると、モジュールブロックもインデントされるようになります。これを停止するには、変数を削除してください。
:unlet b:verilog_indent_modulesVerilogファイルのみにこの変数を設定するには、次の記述を使用できます。
au BufReadPost * if exists("b:current_syntax") au BufReadPost * if b:current_syntax == "verilog" au BufReadPost * let b:verilog_indent_modules = 1 au BufReadPost * endif au BufReadPost * endifさらに、変数`b:verilog_indent_width`を設定してインデント幅を変更できます(デフォルトは'shiftwidth'です)。
let b:verilog_indent_width = 4 let b:verilog_indent_width = shiftwidth() * 2また、デバッグ目的で詳細モードを有効にできます。
let b:verilog_indent_verbose = 1メッセージを表示できるように、最初に ":set cmdheight=2" を実行してください。
ENTITY sync IS PORT ( clk : IN STD_LOGIC; reset_n : IN STD_LOGIC; data_input : IN STD_LOGIC; data_out : OUT STD_LOGIC ); END ENTITY sync;これを無効にするには、
let g:vhdl_indent_genportmap = 0をvimrcファイルに追加してください。これにより、上記の配置例は次のように変更されます。
ENTITY sync IS PORT ( clk : IN STD_LOGIC; reset_n : IN STD_LOGIC; data_input : IN STD_LOGIC; data_out : OUT STD_LOGIC ); END ENTITY sync;右辺代入の " <= " 文の配置は、デフォルトで実行されます。これにより、次の配置例のような結果になります。
sig_out <= (bus_a(1) AND (sig_b OR sig_c)) OR (bus_a(0) AND sig_d);これを無効にするには、
let g:vhdl_indent_rhsassign = 0をvimrcファイルに追加してください。これにより、上記の配置例は次のように変更されます。
sig_out <= (bus_a(1) AND (sig_b OR sig_c)) OR (bus_a(0) AND sig_d);行頭コメント("--"で始まる行)は、直前の行のコメントに合わせてインデントされます。ただし、"--" の後に空白文字がある場合に限ります。
sig_a <= sig_b; -- start of a comment -- continuation of the comment -- more of the same comment挿入モードで、"-- "(空白文字" "に注意)と入力した後、
CTRL-F
を押すと、現在の "-- " が直前の行の "--" に合わせて配置されます。sig_c <= sig_d; -- comment 0 -- comment 1 -- comment 2 --debug_code: --PROCESS(debug_in) --BEGIN -- FOR i IN 15 DOWNTO 0 LOOP -- debug_out(8*i+7 DOWNTO 8*i) <= debug_in(15-i); -- END LOOP; --END PROCESS debug_code; -- comment 3 sig_e <= sig_f; -- comment 4 -- comment 5次のようになります。
sig_c <= sig_d; -- comment 0 -- comment 1 -- comment 2 --debug_code: --PROCESS(debug_in) --BEGIN -- FOR i IN 15 DOWNTO 0 LOOP -- debug_out(8*i+7 DOWNTO 8*i) <= debug_in(15-i); -- END LOOP; --END PROCESS debug_code; -- comment 3 sig_e <= sig_f; -- comment 4 -- comment 5"--debug_code:" は、"--" の後に空白文字がないため、"-- comment 2" と揃えられていないことに注意してください。
:let g:vim_indent_cont = shiftwidth() * 3デフォルト値はshiftwidthの3倍です。
let g:yaml_indent_multiline_scalar = 1