gitでいくつかのファイルをコミットしようとすると、「末尾の空白」エラーが発生します。
Pythonファイルを保存する直前に、これらの末尾の空白文字を自動的に削除したいと思います。
これを行うようにvimを構成できますか?もしそうなら、どうですか?
gitでいくつかのファイルをコミットしようとすると、「末尾の空白」エラーが発生します。
Pythonファイルを保存する直前に、これらの末尾の空白文字を自動的に削除したいと思います。
これを行うようにvimを構成できますか?もしそうなら、どうですか?
回答:
e
最後に、パターンが見つからなかった場合、viは置換コマンドが失敗したとは見なさないことを明確に示しているかもしれません
上記のコンパイルとカーソル位置の保存:
fun! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
keepp %s/\s\+$//e
call cursor(l, c)
endfun
autocmd FileType c,cpp,java,php,ruby,python autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()
保存時にこれを任意のファイルに適用する場合は、2番目autocmd
を省略してワイルドカードを使用します*
。
autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()
autocmd FileType c,cpp,java,php,ruby,python
パーツを削除して、すべてのファイルに適用できるようにしました。
<buffer>
と*
あなたはすべてのファイル上の仕事にそれをしたい場合は
keepp
、それはすなわち、検索履歴を変更しませんkeepp %s/\s\+$//e
私は通常も持っています:
match Todo /\s\+$/
私の.vimrc
ファイルでは、行末の空白が強調表示されます。
Todo は、またはのようなキーワードを強調表示するために使用される構文強調表示グループ名です。それは、厄介な醜い黄色がかった背景色を持っています、そして私はあなたがあなたのコードで望まないものを強調するのが最善であると思います:-)TODO
FIXME
XXX
:hi Todo
。だから私は熟読:hi <Tab>
しました:help hi
。私はと考えCursor
とError
、私は、私がしようと思いますmatch VisualNOS /\s\+$/
。これをautocmd
他の回答のsのいくつかとここで組み合わせるかもしれません。
既存の末尾の空白を強調表示し、末尾の空白も削除します。
エディタ(vim)を設定して、最後に空白を表示します。
これを私の.vimrcの一番下に置きます:
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
そして、私はそれらを保存するときにファイルからそれを「自動ストリップ」します。私の場合、ルビーファイルの場合は* .rb、再び私の〜/ .vimrcに
function! TrimWhiteSpace()
%s/\s\+$//e
endfunction
autocmd BufWritePre *.rb :call TrimWhiteSpace()
http://blog.kamil.dworakowski.name/2009/09/unobtrusive-highlighting-of-trailing.htmlからコピーして貼り付けました(リンクは機能しなくなりましたが、必要なビットは以下のとおりです)
「これには、ファイルを開いたとき、または挿入モードを終了したときだけ、行末で入力した各スペースが強調表示されないという利点があります。非常にきちんとしています。」
highlight ExtraWhitespace ctermbg=red guibg=red
au ColorScheme * highlight ExtraWhitespace guibg=red
au BufEnter * match ExtraWhitespace /\s\+$/
au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
au InsertLeave * match ExtraWhiteSpace /\s\+$/
VIM Wikiaのコメントでこの解決策を見た -不要なスペースを削除する
わたしはそれが本当に気に入った。.
不要な空白にa を追加します。
.vimrc
" Removes trailing spaces
function TrimWhiteSpace()
%s/\s*$//
''
endfunction
set list listchars=trail:.,extends:>
autocmd FileWritePre * call TrimWhiteSpace()
autocmd FileAppendPre * call TrimWhiteSpace()
autocmd FilterWritePre * call TrimWhiteSpace()
autocmd BufWritePre * call TrimWhiteSpace()
これが私のやり方です。どこから盗んだのか思い出せない。
autocmd BufWritePre * :call <SID>StripWhite()
fun! <SID>StripWhite()
%s/[ \t]\+$//ge
%s!^\( \+\)\t!\=StrRepeat("\t", 1 + strlen(submatch(1)) / 8)!ge
endfun
%s
、グローバル(g)フラグがEOLのスペースと同じくらい役に立たない:-)
ファイルから末尾の空白を単に取り除くソリューションは、すべての状況で受け入れられません。最初からこのポリシーが適用されているプロジェクトで機能するため、次のコミットに自分を追加しただけではないような空白はありません。
作業に関係のない変更をコミットせずにコミットを維持するために、編集していない行の既存の空白に影響を与えずに、末尾の空白の新しいインスタンスを追加したくないだけだとします。
その場合、gitを使用すると、次のようなスクリプトを使用できます。
#!/bin/sh
set -e # bail on errors
git stash save commit-cleanup
git stash show -p | sed '/^\+/s/ *$//' | git apply
git stash drop
つまり、変更を隠しておき、+
diffのすべての行をフィルタリングして、作業ディレクトリに変更を再適用するときに、末尾の空白を削除します。このコマンドパイプが成功した場合、スタッシュを削除します。
ここで使用されている他のアプローチは、MacVimでは.vimrc
ファイルで使用した場合、どういうわけか機能しません。したがって、末尾のスペースを強調表示するものを以下に示します。
set encoding=utf-8
set listchars=trail:·
set list
set listchars=trail:·
と言って実行しますE474: Invalid argument: listchars=trail:·
。例を検証できますか?
空白を削除する場合は、既にクリーンなファイルに対してのみ行う必要があります。「ローマにいるとき...」。これは、誤った変更が望ましくないコードベースで作業する場合の良いエチケットです。
この関数は、末尾の空白を検出し、既にクリーンな場合にのみトリミングをオンにします。
このアイデアの功績は、ここのコメントの逸品に行きます:https : //github.com/atom/whitespace/issues/10 (これまでで最も長いバグチケットコメントストリーム)
autocmd BufNewFile,BufRead *.test call KarlDetectWhitespace()
fun! KarlDetectWhitespace()
python << endpython
import vim
nr_unclean = 0
for line in vim.current.buffer:
if line.rstrip() != line:
nr_unclean += 1
print "Unclean Lines: %d" % nr_unclean
print "Name: %s" % vim.current.buffer.name
cmd = "autocmd BufWritePre <buffer> call KarlStripTrailingWhitespace()"
if nr_unclean == 0:
print "Enabling Whitespace Trimming on Save"
vim.command(cmd)
else:
print "Whitespace Trimming Disabled"
endpython
endfun
fun! KarlStripTrailingWhitespace()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
let _s=@/
を保持し、最後にそれを復元することもできます`let @ / = _ s`。この場合、ブラックホールレジスタを使用しています