Vim提供了非常有用的运动命令来跳转到方法的下一个开始/结束:] m,] M,[m和] m.
这些适用于Java或类似的结构化语言.(如:help]中所述m和:help 29.3)
它似乎工作考虑最外层的花括号作为类声明和下一级花括号作为方法声明.
当类定义周围有一对外部花括号时,这些运动命令不起作用,这在C#语言中有点常见.
我想知道是否有一些技巧可以使这些命令(单独和带有运算符的前缀,例如,y [m,V] M)对此代码起作用:
namespace ABC.DEF
{
class A
{
protected string strID;
public string PortID { get { return strID; } set { strID = value; } }
protected MyType x;
public MyType X
{
get { return x; }
set { x = value; if ( x != null ) func1(); }
}
int func1()
{
return 1;
}
int func2(int flag)
{
if (flag == 0)
return flag;
if (flag …
Run Code Online (Sandbox Code Playgroud) 使用以下设置
set textwidth=40
set fo? -> formatoptions=croql)
set comments? -> comments=sO:* -,mO:* ,exO:*/,s1:/*,mb:*,ex:*/,://
set cindent
set cinoptions ->cinoptions=
Run Code Online (Sandbox Code Playgroud)
如果我进入插入模式并开始键入以下行
// abc abc abc abc abc abc abc abc
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,第40个字符的换行符:
// abc abc abc abc abc abc abc
// abc
Run Code Online (Sandbox Code Playgroud)
此外,如果复制并粘贴长度超过40个字符的行
// abc abc abc abc abc abc abc abc
Run Code Online (Sandbox Code Playgroud)
并gqq
输入命令,最终得到与上面相同的结果.
但我注意到,如果我进入插入模式并输入下面的行
void funAbc(void) { // abc abc abc abc abc abc abc abc
Run Code Online (Sandbox Code Playgroud)
它没有打破界限.如果gqq
输入命令,则会产生
void funAbc(void) { // abc abc
abc abc abc abc abc abc …
Run Code Online (Sandbox Code Playgroud) 我正在尝试中断for
循环,例如下面的代码,
for num in buffer_number_list
" Select the buffer
exe 'buffer' num
" Run the command that's passed as an argument
exe a:command
" Save if necessary
update
endfor
Run Code Online (Sandbox Code Playgroud)
当是 a
exe a:command
时,而不是仅中断线路。a:command
:s/// command
目的是更改响应中的代码How to do search & Replace with ack in vim?
我尝试用 / 块包围该行exe a:command
,但它不起作用,可能是因为该命令处理了中断信号而没有重新抛出它try
。catch
尝试重新映射CTRL-c
来更改某些变量(将在循环内部检查),但它不起作用:
let original_Ctrl_c = maparg('<c-c>', 'n')
exe 'nnoremap <c-c> :call <SID>BreakLoop()<CR>' . original_Ctrl_c
Run Code Online (Sandbox Code Playgroud)
当中断信号被捕获时,映射似乎没有触发。
有任何想法吗?
编辑:
看来这个问题只出现在gVim中(感谢@ib。)
使用avr-gcc
它可以将数据存储在程序存储器中以节省RAM.这是使用PROGMEM属性完成的.AVR-libc还提供了一个宏PSTR(),它可以用于文字字符串.
现在,我尝试使用PSTR()
与__func__
,__FUNCTION__
或__PRETTY_FUNCTION__
.
以下代码按预期工作,
display.message(__func__, 2);
display.message(__FUNCTION__, 2);
display.message(__PRETTY_FUNCTION__, 2);
Run Code Online (Sandbox Code Playgroud)
,虽然任何这些行的编译失败,
display.messageP(PSTR(__func__), 2);
display.messageP(PSTR(__FUNCTION__), 2);
display.messageP(PSTR(__PRETTY_FUNCTION__), 2);
Run Code Online (Sandbox Code Playgroud)
,出现以下错误:
initializer fails to determine size of '__c'
Run Code Online (Sandbox Code Playgroud)
来自WinAVR/avr/include/avr的PSTR定义解释了错误消息中引用的变量:
# define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];}))
Run Code Online (Sandbox Code Playgroud)
这不是宏的一般性,因为__FILE__
编译和工作正常:
display.messageP(PSTR(__FILE__), 2);
Run Code Online (Sandbox Code Playgroud)
有关导致此错误的原因的任何想法,以及是否可以使用PSTR()在程序存储器中插入函数名称?
我正在将示例代码直接复制到我的.yml文件中,但是无法使我的窗格运行任何代码:
# Will create panes, but will not open vim or echo
windows:
- editor:
layout: main-vertical
panes:
- vim
- echo test
Run Code Online (Sandbox Code Playgroud)
但是,可以在自己的窗口中运行代码:
# Will open vim
windows:
- vim
- server: gulp watch
Run Code Online (Sandbox Code Playgroud)
我正在跑步tmuxinator version 0.6.7
。
谁能告诉我我在做什么错?谢谢。