10

とても簡単に思えることをしようとしていますが、何らかの理由でうまくいきません。コマンド:

:m 10

現在の行を 10 行目のすぐ下に移動し、

:echo line(".") - 2

カーソルから 2 行上の行の行番号を出力します。ドキュメントを読んだ後、次のコマンドを書きました。

:m line(".") - 2

このエラーが発生しました:

M14:無効なアドレス

=そのため、シンボルを使用しない限り関数は評価されないと考えたので、次のことを試しました。

:m =line(".") - 2

同じエラーが発生しました。スペースが原因ではないことを確認するために、次のことを試しました。

:m =line(".")

それでも同じエラーが発生します。ここで何が間違っていますか?


:mが整数を受け入れ、整数をline()返すことを確認しました。

:echo type(5)
0
:echo type(line("."))
0
4

3 に答える 3

9

式を評価して ex-mode コマンドに渡すには、コマンドを使用する必要がありますexecute。あなたの場合、これは機能します:

:execute "m" line(".") - 2

execute単一の変数を取る関数と考えることができます"m" line(".") - 2。この変数は評価され、ex モードで文字列として実行されます。

詳細については、 を参照してください:help execute

于 2013-01-15T22:35:17.137 に答える
2

次のような相対アドレスを使用することをお勧めします。

:m-2

詳細については、以下を参照してください。

:h range
于 2013-01-15T22:39:46.240 に答える
1

実際、あなたの元の答えはほぼ正しかったです。

:m <C-R>=line(".") - 2

うまくいったでしょう。他の解決策も正しいですが、式レジスタ ( :h quote_=) に関する vim のドキュメントを参照してください。きっと何か興味深いことがわかるはずです!

于 2013-01-15T23:37:07.747 に答える