vim中的自动try/catch语句

vim中的自动try/catch语句,vim,automation,try-catch,Vim,Automation,Try Catch,我发现自己在打字 class Foo{ myFancyType bar(); } myFancyType Foo::bar() { try{ //do some stuff } catch(myFavoriteExceptionType &e){ std::cerr<<e.what()<<std::endl; throw myFavoriteExceptionType("Foo::ba

我发现自己在打字

class Foo{
   myFancyType bar();
}

myFancyType Foo::bar()
{
    try{
        //do some stuff
    }
    catch(myFavoriteExceptionType &e){
        std::cerr<<e.what()<<std::endl;
        throw myFavoriteExceptionType("Foo::bar() failed");
    }
}
class-Foo{
myFancyType条();
}
myFancyType Foo::bar()
{
试一试{
//做点什么
}
捕获(myFavoriteExceptionType&e){

std::cerr确实有一个插件可供您使用,名为snipmate,它的灵感来自textmate自动插入代码段。它通常使用
选项卡
键触发,但可以设置为任何其他先导键。其工作方式非常简单:如果您已经为try-catch定义了一个代码段,您可以st以插入模式写入
try
,它将插入try-catch结构。连续的选项卡将使您跳转到代码段中需要输入的不同部分(例如捕获的内容、处理方法以及最终尝试的代码)

您的另一个选择是尝试比snipmate更智能的UltiSnips,因为您可以在解析代码段时运行一些代码

您也可以在不使用任何插件的情况下制作代码段。您可以使用
map
从正常模式执行,也可以使用
abbrev
从插入模式执行:

map <leader>st maotry {<CR>} catch (my_exception err) {<CR>std::cerr<<e.what()<<std::endl;<CR>throw myFavoriteExceptionType("Foo::bar() failed");<CR>}<ESC>='a'ao
当您在插入模式下键入时,也会执行相同的操作


HTH

确实有一个插件可以用于此目的,它叫做snipmate,受textmate自动插入代码片段的启发。它通常使用
选项卡
键触发,但可以设置为任何其他主击键。它的工作方式非常简单:给定为try-catch定义的代码片段,您可以必须在插入模式下写入
try
,它将插入try-catch结构。连续的选项卡将使您跳转到代码段中需要输入的不同部分(如捕获的内容、处理方法以及最终尝试的代码)

您的另一个选择是尝试比snipmate更智能的UltiSnips,因为您可以在解析代码段时运行一些代码

您也可以在不使用任何插件的情况下制作代码段。您可以使用
map
从正常模式执行,也可以使用
abbrev
从插入模式执行:

map <leader>st maotry {<CR>} catch (my_exception err) {<CR>std::cerr<<e.what()<<std::endl;<CR>throw myFavoriteExceptionType("Foo::bar() failed");<CR>}<ESC>='a'ao
当您在插入模式下键入时,也会执行相同的操作

HTH

在中,我在
try
catch
上提供了(上下文相关)(插入模式)缩写,映射可以用
try{…}catch{}
catch(){…}
围绕选择,以及可以同时完成这两项工作的代码段

其他C和C++控制语句的片段、缩略图和映射也被提供。

PS:在每一步捕获异常通常是非常糟糕的模式,C++(IN和其他语言中有例外)。参见E.17:不要试图捕捉每个函数中的每个异常;E.18:尽量减少显式Test/Ccatch

< P>的使用,我提供(上下文敏感)(插入模式)在
try
catch
上的缩写词,映射可以用
try{…}catch{}
catch(){…}
以及可以同时执行这两项操作的代码段围绕选择

其他C和C++控制语句的片段、缩略图和映射也被提供。


PS:在每一步捕获异常通常是非常糟糕的模式,C++(IN和其他语言中有例外)参见--E.17:不要试图捕捉每个函数中的每个异常;E.18:尽量减少使用显式的try/catch

哼哼……这实际上并不是离题,因为OP已经发现了他的vim编辑过程中的一个问题,正在寻找解决方案。我还更新了我的答案,给OP提供了一种不用插件的方式,但只有with vim的内部构件(电池耗尽时)☺不幸的是,许多人认为关于编程工具配置的问题不受欢迎。他们宁愿将掌握这些工具的社区分散在几个网站上:(顺便说一句,手动解决方案确实可以给出,但当已经存在解决OP所表达需求的复杂插件时,这不会提供最佳的最终用户体验——当插件很复杂时,需求可能不是那么琐碎或完全公式化(例如,没有人希望
try
在字符串或注释上下文中展开;有些人希望
{
在新行上展开,其他人则不希望,等等)好吧,我认为这是对:-)的重复或者可能会转移到vi SE!但无论如何……嗯……这实际上并不是离题,因为OP已经发现他的vim编辑过程存在问题,并正在寻找解决方案。我也在更新我的答案,让OP可以不用插件,但只使用vim的内部(当我耗尽电池时)☺不幸的是,许多人认为关于编程工具配置的问题不受欢迎。他们宁愿将掌握这些工具的社区分散在几个网站上:(顺便说一句,手动解决方案确实可以给出,但当已经存在解决OP所表达需求的复杂插件时,这不会提供最佳的最终用户体验——当插件很复杂时,需求可能不是那么琐碎或完全公式化(例如,没有人希望
try
在字符串或注释上下文中展开;有些人希望
{
在新行中展开,而其他行则不是,等等)好吧,我会投票赞成这是对:-的复制,或者可能以其他方式移动到vi SE!但是无论如何……映射和缩写应该是
-本地和
nore
(为了避免使用括号括住插件的问题)。此外,我怀疑映射在可视模式下不起作用,它应该显式地是
nnoremap
。然后catch应该带有const引用,但这是另一个与vim无关的问题:)映射和缩写应该是
-本地和
nore
(避免与布雷克发生问题