6

VimにはGUIDジェネレーターが組み込まれていません。

私が取り組んでいるプロジェクトでは、Powershellが利用可能であると信頼できるため、次のようにGUID文字列が表示されます。

[guid]::NewGuid().ToString()

私はこれを次のように置換内で呼び出します。

%s/foo/\=system('[guid]::NewGuid().ToString()')[:2]/

これは機能しますが、置換ごとにウィンドウが点滅し、非常に遅くなります。

私が本当に望んでいるのは、Vim内で移植可能かつ迅速にGUIDを生成する方法です。

4

7 に答える 7

11

VimのPythonスクリプトサポートが利用可能であると信頼できる場合

:py import uuid
:%s/foo/\=pyeval('str(uuid.uuid4())')/
于 2012-09-10T11:10:31.053 に答える
3

Vim言語ラッピング(PythonやPerlなど)を使用したくない/使用できない場合は、Win32UuidCreate()関数のDLLラッパーを作成し、Vimからを介して呼び出す必要がありlibcall()ます。(ヘルプには、呼び出し規約が一致しないため、WindowsシステムDLLを直接呼び出すことはできないと書かれています。)

ラッパーはおそらくシンプルで簡単に作成できますが、それでもDLLをコンパイルして各システムにインストールする必要があります。

于 2012-09-10T11:34:30.287 に答える
2

fooをランダムな16進数に置き換えたいだけだと思います。もしそうなら、あなたはこのようにすることができます:

M $ウィンドウ:

%s/foo/\=printf("%04X",libcallnr("msvcrt.dll","rand",localtime()))[:2]/

Unixの場合:

%s/foo/\=printf("%04X",libcallnr("libc.so.6","rand",localtime()))[:2]/

これは、他のどのシェルコマンドよりもはるかに高速です。

于 2012-09-11T06:29:33.993 に答える
2

交換

'[guid]::NewGuid().ToString()'

'powershell.exe -command "[guid]::NewGuid().ToString()"'

それは役に立ちますか?

于 2012-09-10T11:01:25.127 に答える
1

Windowsでは、system()コマンドはコマンドウィンドウをポップアップします(ただし、通常はバックグラウンドで)。これを回避する1つの方法は、Vimにコンパイルされた言語バインディング(Pythonなど)を使用することです。

:python import uuid, vim; vim.command("let g:uuid = '" + str(uuid.uuid1()) + "'

これはより高速でポップアップを回避しますが、PythonのインストールとPythonをサポートするVimが必要です。何らかの理由で別の言語を好む場合は、おそらく同様のPerlまたはRubyの実装を思い付くことができます。残念ながら、PowerShell言語バインディングはまだありません。

于 2012-09-10T11:17:16.193 に答える
1

質問タイトルがUUIDの作成方法を尋ねているため、ここに到達しましたが、質問テキストは実際には既存のテキストブロックを新しく作成されたUUIDに置き換えたいと考えています。

Marius Gedminasの回答は私を非常に遠ざけました。他の誰かがUUIDを作成して挿入する必要がある場合は、次の方法があります。

function! Guid()
python << EOF
import uuid, vim
vim.command("normal i" + str(uuid.uuid4()) )
EOF
endfunction

マップしたい場合<alt+G>map <m-g> :call Guid() <cr>

(Pythonの呼び出し時にGvimがクラッシュした場合は、こちらをお読みください

于 2017-11-13T13:57:33.803 に答える
1

パスにあると仮定するとpython、カーソルにUUIDを挿入または追加するためのマッピングを次に示します。プラットフォームに依存しない必要があります。

" Insert GUID
nnoremap <silent><leader>ig "=system('python -c "import uuid; print(uuid.uuid4(), end=\"\");"')<CR>P

" Append GUID
nnoremap <silent><leader>ag "=system('python -c "import uuid; print(uuid.uuid4(), end=\"\");"')<CR>p

使い方:

  • python -c "import uuid; print(uuid.uuid4(), end=\"\");"'-モジュールを使用pythonして、改行なしでUUIDをSTDOUTに出力するシェルワンライナー。uuid
  • "=-vim"に次の値を指定されたレジスタ(この場合は式レジスタ)に割り当てるように指示します。=
  • system(...)-これはシェルアウトし、レジスタへの割り当てで使用するために出力をリダイレクトします
  • <CR>Pまたは<CR>p-レジスタを評価してカーソルに貼り付けます(それぞれ挿入、追加)
于 2020-12-02T23:27:55.207 に答える