Visual Studio 2015/ReSharper 取消引用文本的键盘快捷方式
Visual Studio 2015/ReSharper keyboard shortcut for unquoting text
使用 VIM,我可以使用 Tim Pope 的精彩 vim-surround 插件来放置光标在一个字符串中并发出 ds"
键盘序列以取消引用它。如何在 VS 中或使用 Resharper 实现等效?
VIM + vim-环绕声:
"aaa|aaaaa"
---> 按 ds"
---> aaa|aaaaa
在 VS 中,我知道我可以使用正则表达式 Find/Replace 查询:
|"aaaaaaaa"
---> 按 Ctrl+H
---> ...
查找: "(.+?)"|'(.+?)'
将替换为:</code></p>
<p>...按<code>Alt+R
替换下一个,我们有:
aaaaaaaa
(选择下一个匹配的带引号的字符串)
...但我想把它变成一个由键盘快捷键触发的宏。
我从 Visual Studio 图库 安装了 Visual Studio 扩展的宏,但这并没有在录制宏时注册与 Find/Replace 对话的交互。
我试着自己写了一个基于Using Search and Replace Macros in Visual Studio的宏,但是它不起作用。我收到错误,例如vsFindTarget
和 vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
未定义。
这是我失败的宏代码:
dte.ExecuteCommand("Edit.Replace");
dte.Find.FindWhat = "\"(.+?)\"|'(.+?)'";
dte.Find.ReplaceWith = ""
dte.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
dte.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
dte.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone
dte.Find.Action = vsFindAction.vsFindActionReplace
dte.Find.Execute()
我查看了 Microsoft's documentation mentioned in this SO answer,但遇到了上述问题。让我觉得 Visual Studio 扩展 的宏在原生 VS [=89= 之上有自己的 API ],或者(很可能)我只是不明白。
如有任何帮助,我们将不胜感激。谢谢!
我决定将 Vim 与 Visual Studio using Vim as an external tool 集成,但使用控制台 Vim 而不是 gVim:
在 VS 中,转到 工具 > 外部工具... > 添加
- 标题:
&Vim
- Command:
C:\[...]\usr\bin\mintty.exe
(或者你有 mintty.exe
的任何地方 - 例如,它是 Git 的一部分 Windows 安装)
- 参数:
"C:\[...]\usr\bin\vim.exe" +"call cursor($(CurLine),$(CurCol))" +"runtime visualstudioinvoke.vim" "$(ItemFileName)$(ItemExt)"
(使用 vim.exe
的实际路径;很长的路径可能不起作用)
- 初始目录:
$(ItemDir)
- 可选地,为方便起见,将工具设置为第一个(见第 4 点)
- 单击确定
创建 ~/.vim/visualstudioinvoke.vim
或 ~/vimfiles/visualstudioinvoke.vim
取决于哪个有效(对我来说,前者有效)具有以下内容:
set autoread
autocmd CursorMoved,CursorMovedI * call CheckTime()
" How many seconds to wait between file timestamp checks
let s:check_time_delay=5
let s:last_check_time=reltime()
function CheckTime()
if(reltime(s:last_check_time)[0] > s:check_time_delay)
let s:last_check_time=reltime()
checktime %
endif
endfunction
上面确保 Vim 在 VS(或Vim)。检查发生在 Vim 内,但不超过每 5 秒一次。
返回 VS,转到 工具 > 选项 > 环境>文档和厚Detect when file is changed outside the environment
和Reload modified files unless there are unsaved changes
在VS中为Vim外部工具添加键盘快捷键:
- 转到工具 > 选项 > 环境 > 键盘和显示包含的命令:
Tools.ExternalCommand1
(假设Vim是第一个外部工具)。
- 在Press shortcut keys下,我用的是[Ctrl]+[`] (反引号)组合;随心所欲。
就是这样。现在您可以在 Vim 中快速打开您在 VS 中查看的文件,并且光标位置被保留。此外,保存的更改会在编辑器之间自动同步。对于取消引用的文本,请确保 Vim.
中包含 vim-surround plugin
使用 VIM,我可以使用 Tim Pope 的精彩 vim-surround 插件来放置光标在一个字符串中并发出 ds"
键盘序列以取消引用它。如何在 VS 中或使用 Resharper 实现等效?
VIM + vim-环绕声:
"aaa|aaaaa"
---> 按ds"
--->aaa|aaaaa
在 VS 中,我知道我可以使用正则表达式 Find/Replace 查询:
|"aaaaaaaa"
---> 按Ctrl+H
---> ...查找:
"(.+?)"|'(.+?)'
将替换为:</code></p> <p>...按<code>Alt+R
替换下一个,我们有:aaaaaaaa
(选择下一个匹配的带引号的字符串)
...但我想把它变成一个由键盘快捷键触发的宏。
我从 Visual Studio 图库 安装了 Visual Studio 扩展的宏,但这并没有在录制宏时注册与 Find/Replace 对话的交互。
我试着自己写了一个基于Using Search and Replace Macros in Visual Studio的宏,但是它不起作用。我收到错误,例如vsFindTarget
和 vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
未定义。
这是我失败的宏代码:
dte.ExecuteCommand("Edit.Replace");
dte.Find.FindWhat = "\"(.+?)\"|'(.+?)'";
dte.Find.ReplaceWith = ""
dte.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
dte.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
dte.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone
dte.Find.Action = vsFindAction.vsFindActionReplace
dte.Find.Execute()
我查看了 Microsoft's documentation mentioned in this SO answer,但遇到了上述问题。让我觉得 Visual Studio 扩展 的宏在原生 VS [=89= 之上有自己的 API ],或者(很可能)我只是不明白。
如有任何帮助,我们将不胜感激。谢谢!
我决定将 Vim 与 Visual Studio using Vim as an external tool 集成,但使用控制台 Vim 而不是 gVim:
在 VS 中,转到 工具 > 外部工具... > 添加
- 标题:
&Vim
- Command:
C:\[...]\usr\bin\mintty.exe
(或者你有mintty.exe
的任何地方 - 例如,它是 Git 的一部分 Windows 安装) - 参数:
"C:\[...]\usr\bin\vim.exe" +"call cursor($(CurLine),$(CurCol))" +"runtime visualstudioinvoke.vim" "$(ItemFileName)$(ItemExt)"
(使用vim.exe
的实际路径;很长的路径可能不起作用) - 初始目录:
$(ItemDir)
- 可选地,为方便起见,将工具设置为第一个(见第 4 点)
- 单击确定
- 标题:
创建
~/.vim/visualstudioinvoke.vim
或~/vimfiles/visualstudioinvoke.vim
取决于哪个有效(对我来说,前者有效)具有以下内容:
set autoread
autocmd CursorMoved,CursorMovedI * call CheckTime()
" How many seconds to wait between file timestamp checks
let s:check_time_delay=5
let s:last_check_time=reltime()
function CheckTime()
if(reltime(s:last_check_time)[0] > s:check_time_delay)
let s:last_check_time=reltime()
checktime %
endif
endfunction
上面确保 Vim 在 VS(或Vim)。检查发生在 Vim 内,但不超过每 5 秒一次。
返回 VS,转到 工具 > 选项 > 环境>文档和厚
Detect when file is changed outside the environment
和Reload modified files unless there are unsaved changes
在VS中为Vim外部工具添加键盘快捷键:
- 转到工具 > 选项 > 环境 > 键盘和显示包含的命令:
Tools.ExternalCommand1
(假设Vim是第一个外部工具)。 - 在Press shortcut keys下,我用的是[Ctrl]+[`] (反引号)组合;随心所欲。
- 转到工具 > 选项 > 环境 > 键盘和显示包含的命令:
就是这样。现在您可以在 Vim 中快速打开您在 VS 中查看的文件,并且光标位置被保留。此外,保存的更改会在编辑器之间自动同步。对于取消引用的文本,请确保 Vim.
中包含 vim-surround plugin