3

.vimrcファイルに次の行があります。

set directory=~/.vim/swapfiles//

(競合を減らすために、1つの余分なスラッシュを使用すると、ファイル名だけでなくディレクトリ名も含まれることに注意してください)

上記の設定は私のLinuxマシンでは正常に機能しますが、問題は、Windowsで同じファイルを使用すると、ファイルを読み取れないという警告が表示されることです。これはおそらく、vimがディレクトリを探しているためですが~/.vim/swapfiles/、残念ながらWindowsにはありません。

スワップファイルをWindowsのどこかに保存する方法はありますか(に保存できればより良いですC:\Program Files\Vim\vimfiles\


ケース#2

上記の質問に対する回答が得られた場合は、別の質問をご覧ください。私もこれに似たいくつかの行があります:

autocmd filetype python source ~/path/to/file/python.vim

この時点でもWindowsは混乱しています。どうすればパッチを適用できますか?

4

4 に答える 4

4

$MYVIMZyXが示唆するように変数を導入したくない場合は、Windows$HOME/.vimのデフォルトの代わりにランタイムファイルを配置することもでき$HOME/vimfilesます。~/.vim/...その後、どこでも使用できます。これは、複数の混合プラットフォームマシン間でファイルを同期するのにも役立ちます。

" On Windows, also use '.vim' instead of 'vimfiles'; this makes synchronization
" across (heterogeneous) systems easier.
if has('win32') || has('win64')
    set runtimepath=$HOME/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after
endif
于 2012-09-13T20:17:05.630 に答える
1

たぶんあなたが望むのは、 ?directoryのエントリに基づいて設定することです。runtimepathこれを試して:

let &directory = substitute(&rtp, ",", "/swapfiles//,", "g")

runtimepathUnix-yシステムのデフォルト設定では、

$HOME/.vim/swapfiles//,
$VIM/vimfiles/swapfiles//,
$VIMRUNTIME/swapfiles//,
$VIM/vimruntime/after/swapfiles//,
$HOME/.vim/after//

およびWindowsの場合

$HOME/vimfiles/swapfiles//,
$VIM/vimfiles/swapfiles//,
$VIMRUNTIME/swapfiles//,
$VIM/vimfiles/after/swapfiles//,
$HOME/vimfiles/after/swapfiles//

同意します。afterディレクトリは不要ですが、vimは存在する最初のディレクトリを選択し、ファイルの作成を許可するため、swapfilesサブディレクトリを作成しない場合は変更されません。

ディレクトリが存在しない場合にデフォルトをフォールバックとして使用できるように、これらを置き換えるのではなく、デフォルト値の前に追加することを検討することをお勧めします。

あなたが言及している自動コマンドがある理由がわかりません。runtimepathwithのデフォルト設定でfiletype plugin onそれを処理する必要があります。

もちろん、プラットフォームを明示的にチェックし、次のようにさまざまな設定を使用するオプションが常にあります。

if has("win32")
  " settings for windows
elif has("win32unix")
  " settings for cygwin
elif has("unix")
  " settings for unix
elif has("macunix")
  " settings for macosx
endif

ファイルが存在しない場合のエラーを回避したい場合は、vimrcで次の定義を使用できます

func! Source(file)
  if filereadable(a:file)
    exec "source " . fnameescape(a:file)
  endif
endfunction

com! -nargs=1 -complete=file Source call Source(<f-args>)

ファイルが存在しない可能性がある場合に変更sourceします。Source

于 2012-09-13T19:51:24.007 に答える
0

autocmdは必要ないというGeoffReedyに完全に同意します。それ以外の場合は、の:runtime代わりに使用できます:source。すべて(のユーザーおよびシステムディレクトリ)を自動的に検索します'runtimepath'

于 2012-09-13T20:13:14.083 に答える
0

まず第一に、vimはウィンドウ上ですべての前方スラッシュを後方に変換するので、スラッシュがあっても害はありません。トラブルの原因になると思われる場合に備えて。

第二に、Windows上に他のすべてのディレクトリを置くことは不可能ではありませ~/.vimん。ドットで始まる名前を使用したくないプログラムもあります。これはデフォルトではWindowsにはないため、runtimepathに追加するだけで、すべてのユーザー構成をそこに移動できます。

第三に、ほとんどの場所で使用できるファイル名があります$ENV_VAR。これには、&rtp、&directoryの設定、およびの使用が含まれます:source。したがって、解決策は次のようになります。

if has('win16') || has('win95') || has('win32') || has('win64')
    let $MYVIM=$HOME.'/vimfiles'
else
    let $MYVIM=$HOME.'/.vim'
endif
set directory=$MYVIM/swapfiles
autocmd FileType python :source $MYVIM/after/ftplugin/python.vim

(私は@Geoff Reedyに同意しますが、最後の行を使用する必要はないはずです)。

そして最後に、何かを変更して保存することC:\Program Filesは、あなたにとってもプログラム自体にとっても最善のアイデアではありません(ちなみに、vimは、指示がない限り、何かを変更したり保存したりすることはありません)。これは、インストール、更新、およびアンインストールのプロセスによって変更され、他のプロセスによって変更されることはありません。

于 2012-09-13T20:00:36.777 に答える