小编mMo*_*ntu的帖子

Vim [m动作用c#

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)

c# vim

13
推荐指数
1
解决办法
1812
查看次数

在vim中使用代码和注释格式化行

使用以下设置

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)

vim

9
推荐指数
1
解决办法
340
查看次数

捕获中断/中断命令

我正在尝试中断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,但它不起作用,可能是因为该命令处理了中断信号而没有重新抛出它trycatch

尝试重新映射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。)

vim

5
推荐指数
1
解决办法
715
查看次数

PSTR()on __FUNCTION__

使用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()在程序存储器中插入函数名称?

c c++ embedded avr-gcc

5
推荐指数
1
解决办法
8378
查看次数

Tmuxinator窗格代码不起作用

我正在将示例代码直接复制到我的.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

谁能告诉我我在做什么错?谢谢。

terminal tmux tmuxinator

3
推荐指数
1
解决办法
1593
查看次数

标签 统计

vim ×3

avr-gcc ×1

c ×1

c# ×1

c++ ×1

embedded ×1

terminal ×1

tmux ×1

tmuxinator ×1