VimでPythonコードのブロックをコメント化する方法


186

Vimに特定のコード行をインデントできるようにするキーマッピングがあるかどうか疑問に思っていました(これらの行がビジュアルモードで選択されているか、現在のカーソル位置の上下にn行あるか)。

だから基本的には次のものを変換するもの

def my_fun(x, y):
    return x + y

#def my_fun(x, y):
#    return x + y

私はどちらか使用して大丈夫だ#か、"""関連する行をコメントアウトするために。理想的には、特定の行がコメント化されている場合は、同じキーマッピングで行のコメントを解除することもできます。


ホイールを再発明する必要はありません。プラグインがあります。tCommentfor youは、複数の言語の(非)コメントコードをサポートします。
ニャー

回答:


411

手順1:コメントする最初の行の最初の列に移動します。

初期状態

ステップ2:Ctrl + vを押して、コメントする行を選択します。

行を選択

ステップ3: Shift - I#space(選択は消えます挿入するために、タイプの文字を挿入・アット・左モードに入りますが、その中のすべての行は、ステップ4の後に変更されます。)

コメント

ステップ4: Esc

<Esc>


4
この方法で行にコメントを付けると効果的です。これらの行のコメントを解除する方法はありますか?Shift-I # <ESC>うまくいきませんでした(たぶん私はそれを間違っています)。
Rishabh Manocha

41
@ rishabh-manocha:ビジュアルブロック(Ctrl-V)を使用して、追加されたすべての#を選択し、xと入力してそれらを削除します。
theosp

3
Shift-Iは「行の最初の空白以外の位置に挿入する」ことを意味するため、削除に使用することはできません。Ctrl-Vで視覚的な選択を行うと、変更する文字がマークされ、「x」を押すと、選択した領域の1文字が削除され、「#」文字が削除されます。詳細は、vimの「:h I」および「:h CTRL-V」を参照してください。
Tin Man

5
@Samaursa Ctrl-VはおそらくWindowsでは動作しません。代わりにCtrl-Qを試してください。
AZ。

1
2文字を削除するには( '#'を挿入した場合)、変更する先頭行にカーソルを置き、ctrl-vを押してビジュアルブロックモードに入り、j(または下矢印)を押して変更するすべての行を強調表示し、 l(または右矢印)で2文字幅を強調表示し(列ごとに1回押すと強調表示されます)、dを押すと強調表示されたテキストを削除します。
thinkmassive 2014


49

次のマッピングを.vimrcに追加できます

vnoremap <silent> # :s/^/#/<cr>:noh<cr>
vnoremap <silent> -# :s/^#//<cr>:noh<cr>

ブロックを強調表示します。

Shift+v

# 最初の列から行をコメント化します。

-# 同じ方法でコメントを外します。


5
シンプルは素晴らしいです!ありがとうございます!
I159 2014

1
@architectonicは、ビジュアルモードでない限り効果がありません。ビジュアルモードでは「#」はバインドされていませんvimdoc.sourceforge.net/htmldoc/visual.html#visual-operators
cdated '13

1
少し変更しました:Ctrl + kでコメント "vnoremap <silent> <Ck>:s#^#\ ## <cr>:noh <cr>"> Ctrl + uでコメント解除: "vnoremap <silent> <Cu >:s#^ \ ### <cr>:
noh

1
@JonathanHartleyこの場合、「/」を使用する必要はありません。この場合、「#」が区切り文字です。したがって:s / ^ /#/と:s ​​/ ^#//は同等の置換です。したがって、行の先頭を「#」に置き換え、最初の列の「#」を「」に置き換えます。<cr>:noh <cr>は検索文字列をクリアするだけなので、作業が終了しても何も強調表示されません。
2016

1
@JonathanHartley正直言って、私はそれについて考えずにパターンをたどっただけだと思います。今、私は驚きました#対/早く来なかった。常識に基づいて答えを変更しました。ありがとう!
2016

26

ブロックを強調表示します。 ShiftV

選択したブロックをコメントアウトします:(:norm i#小文字のi)

コメントを解除するには、ブロックを再度ハイライトし、次のコマンドでコメントを解除します。 :norm ^x

この:normコマンドは、選択されたすべての行に対してアクションを実行します。コメントを付けると、#各行の先頭にaが挿入され、コメントを外すと削除され#ます。


最新のVimと単純な構成で、ビジュアルモードで(をShift+v使用して)行を選択し、次に使用:norm i#すると、最初に選択された行のみが変更されます。これは、389行目から391行目をコメントするのに:389,391norm i #
役立ち

22

私は通常、ビジュアルブロック(<C-V>)を一掃し、最初の文字を検索して次のものに置き換えます。

:'<,'>s/^/#

(ビジュアルブロックが選択された状態でコマンドモードに入ると、コマンドラインに '<、'>が自動的に配置されます)次に、同じビジュアルブロックを一掃して、ブロックのコメントを解除します。

:'<,'>s/^#//


9

私には次の行があります.vimrc

" comment line, selection with Ctrl-N,Ctrl-N
au BufEnter *.py nnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N><C-N>    <C-O>mn<C-O>:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>gv`n

" uncomment line, selection with Ctrl-N,N
au BufEnter *.py nnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>:s/^#$//ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N>n     <C-O>mn<C-O>:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR><C-O>:s/^#$//ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>gv:s/#\n/\r/ge<CR>:noh<CR>gv`n

ショートカットは、カーソル位置とコメントが先頭から始まる限り保持します#(#の後にスペースがあります)。例えば:

# variable x
x = 0

コメントした後:

# variable x
#x = 0

コメント解除後:

# variable x
x = 0

いいですが、より単純なs/^/#/正規表現を使用した方がいいと思います。私はコメント文字を行の先頭に置くことを好みます...しかし、はるかに重要なことに、「コメントのコメント」は本当にかなり重要です。コマンドもデフォルトですべてのバッファで使用するのに十分なコメントなau BufEnter *.pyので、私もをドロップ#します。
travc 2014年

5

率直に言って、そのリンクにはtcommentプラグインを使用しています。ほとんどすべての構文を処理できます。それは素晴らしい動きを定義し、それをpythonに固有のいくつかのテキストブロックマッチャーと一緒に使用すると、強力なツールになります。


5

NERDcommenterは、多数のファイルタイプとそれに関連するコメント文字を自動的に検出するコメント用の優れたプラグインです。Pathogenを使用すると、インストールが途方もなく簡単です。

でコメントしてください<leader>cc。とのコメントを解除し<leader>cuます。でコメントを切り替えます<leader>c<space>

<leader>vim のデフォルトのキーは\


3

vimには多数のコメントプラグインがあります。その多くは多言語で、Pythonだけではありません。Vundleのようなプラグインマネージャを使用している場合は、次のようにして(Vundleをインストールしたら)それらを検索できます。

:PluginSearch comment

そして、結果のウィンドウが表示されます。または、vim-scriptsでコメントプラグインを検索することもできます


3

プラグインやマッピングは必要ありません。組み込みの「norm」コマンドを試してください。このコマンドは、選択したすべての行で文字通り何でも実行します。

#件のコメントを追加

1. shift V to visually select lines
2. :norm i#

#件のコメントを削除

1. visually select region as before
2. :norm x

または、コメントがインデントされている場合は、 :norm ^x

これらは、各行で実行するために ":norm"が前に付いている通常のvimコマンドにすぎないことに注意してください。

ここの回答の1つで「norm」コマンドを使用するためのより詳細な回答

Vimで行をコメント/コメント解除する簡単な方法は何ですか?


1

非常に最小限の軽量プラグイン:vim-commentary。

gccコメント
gcgcを解除する行をコメント化します。詳細については、プラグインのページをご覧ください。

v+k/jブロックを強調表示してから、そのブロックgccにコメントを付けます。


0

CtrlK コメント用(ビジュアルモード):

vnoremap <silent> <C-k> :s#^#\##<cr>:noh<cr>

CtrlU コメント解除(ビジュアルモード)の場合:

vnoremap <silent> <C-u> :s#^\###<cr>:noh<cr>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.