免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mumalala
打印 上一主题 下一主题

[C++] linux下学习C++  关闭 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-07-30 19:14 |只看该作者
回楼上,
我说投入产出比高,
一是因为我觉得对我来说投入真的没有多高,我现在常用的这些命令你一个星期内也一定能掌握,它们能提高效率
二是产出,如你所言,它是通用编辑器,而不是针对 c/c++ 的。另外即使只写和修改 c/c++ 代码我也觉得会比 vc 这样的 ide 快。19 楼列出了几个我最常用的命令,不知道 editplus 或 vs 之类的编辑器/ide 是否有类似的功能?如果有,那是我孤陋寡闻了,如果没有,那我认为这些就是 vim 的先进之处。

。。。。。。

这种说法是否很牵强?
为什么你会觉得很牵强,开两个窗口切换很累吗?又不用老是切来切去的

论坛徽章:
0
22 [报告]
发表于 2009-07-30 20:30 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
23 [报告]
发表于 2009-07-30 21:27 |只看该作者
vim+g+++c-support(plugin for vim)

论坛徽章:
0
24 [报告]
发表于 2009-07-30 21:58 |只看该作者
原帖由 网鬼 于 2009-7-30 16:47 发表
vim的确很强,但要熟练应用真是得花比较长的时间,当真正掌握其应用,才能体会到其强大之处
虽然许多人强烈推荐使用,但结果是由于许多人可能还是习惯于简单易用的编辑器,所以一时无法适应
特定的需求用特定 ...

编辑从

我编辑c++的时候用VIM 只要输入HE(一个自定义的函数), 然后输入类的名称,就会生成下面的代码。其他那个编辑器有这种功能。 善用VIM的函数和自定义功能,就能产生无穷的变化。让你偷懒也偷出境界来!


#ifndef __POLICY_HPP__
#define __POLICY_HPP__
//===============================[ Includes ]================================//
// ??Includes??
//=============================[ Class Policy ]==============================//
class Policy
{
//-----------------------------[ Construction ]------------------------------//
    //! \name Construction
    //
    //@{
public:
    // Argument-less constructor
        Policy();
    // Copy constructor
        Policy(const Policy & rhs);
    // Copy operator
        Policy& operator=(const Policy & rhs);
    // Destructor
        virtual ~Policy();
    //@}

//----------------------------[ Public methods ]-----------------------------//
    //! \name Public methods
    //
    //@{
public:
    //@}

//---------------------------[ Internal methods ]----------------------------//
    //! \name Internal methods
    //
    //@{
protected:
    //@}

//---------------------------------[ Data ]----------------------------------//
    //! \name Data
    //
    //@{
private:
    //@}

//-----------------------------[ End of class ]------------------------------//
};
#endif

论坛徽章:
0
25 [报告]
发表于 2009-07-31 09:27 |只看该作者
Vim 的过人之处说白了就是,效率,效率,还是效率。

从功能上来说,现在比较好的编辑器,什么 Notepad++  UE ...  可能不比 Vim 差多少。

如 OwnWaterloo  所说,部分专用的工具可能在效率和易用性方面都超过 Vim,但是比较可惜,它们是"专用工具",就拿写代码来说,俺平时写的有 Perl、C++、LaTeX、Asymptote、html、CSS、xml 几种代码,有时候写几行 makefile、shell、SQL 啥的, 如果用专用工具的话至少得五六种, 现在用 Vim 全部解决,效率也不比专用工具差,这也就是所谓“投入产出比高”。

俺感觉另外一个效率就是 Vim 的模式带来的突破,这也让俺感到鼠标在文本编辑方面是无法超越键盘的。
简单举个例子,俺要移动第5行至第13行到第1257行下面,没有编辑器能比 Vim 做得更高效。
再譬如俺要删除所有包含 win-ie 的行,可能也没有编辑器能比 Vim 快捷。
又譬如俺需要将 100-2000行另存一个文件...  这样的操作应该是文本编辑中比较常见的。
在编辑时要移动句子末尾、移动到匹配的括弧处,在某处做个标记..........
大多数人应该都不喜欢盯着屏幕拉鼠标的感觉 :wink:

第三点就是: Vim 可以运行在很多平台下,在不同的环境下保持相同的操作习惯,也应该算效率的一个方面

[ 本帖最后由 redspider 于 2009-7-31 09:33 编辑 ]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
26 [报告]
发表于 2009-07-31 14:33 |只看该作者

回复 #21 windaoo 的帖子

-------- -------- -------- -------- -------- -------- -------- --------
我先说说我常用的功能吧:

1. 自动完成 ( alt + -> )
di'I' (用'I'代表插入符位置,下同)

会提示
div
div_t
...

2. 列出成员 ( ctrl + j )
div_t r;
r.'I'

会提示quotrem, 还会提示它们的类型

当然, 你要这么理解:
原帖由 windaoo 于 2009-7-30 18:31 发表
其实看你怎么想,有这个功能和没这个功能都有好处,有的好处是可以快速上手,没有的好处是强迫你把结构体记在心里。
我认为记在心里对我有好处


参见“理想的功能”



首先, 这2个功能让我代码写得快。
嗯,我知道,vim可以结合ctags、cscope。可能有自动完成功能。
而列出成员功能,在http://bbs3.chinaunix.net/thread-1521350-1-1.html 这贴中,暂时没人能解决。
反而暴露了诸多vim使用者的心理, 参见"理想的功能"。


再者,不能拿template这种关键字, 还有printf这种标准库函数来比。
支持前者自动完成、高亮的功能太简单, 而后者可以ctags之后一直使用。

而在VA的帮助下, 我在代码前部分声明了一个函数(无论是include 得来还是手写):
some_type some_function(parameter* p);

立即能在后部分得到自动完成功能
par(ameter) argument;
arg(ument).mem(ber) = some(_value);
some_(type) r = some_(function)(&arg(ument));

括号中是保守估计自动完成节省的字数。

我不知道visual assisant是按什么频率去更新符号的。 ctags能自动更新吗怎么做


3. 参数提示 ( ctrl + shift + space )
div('I'

会提示
div_t div(int a,int b);
ldiv_t div(long a,long b);  // 包括所有重载

提示中,第1个参数会加粗,随着输入参数分隔符",",加粗的效果会依次滑向另一个参数,让我时刻知道现在应该键入哪一个实际参数
提示的地方就在插入符附近眼光不用离开我正在编辑的地方
而不是构造一个什么表达式,再去搜索源代码,然后将目光移动到一个存放结果(可能还不止一个)的地方。


其三, 我知道这3个快捷键设计得都不好,尤其是参数提示很容易将输入法按出来……
但实际上, 这3个快捷键是我刚刚去查的(菜单上会写),而我平时都没使用过…… 因为它们都是自动的。
输入2-4个字符之后, 自动完成就会自动出现。
输入.或者->或者::之后,列出成员就会自动出现。
输入函数调用的左括号"("之后, 参数提示就会自动出现。
我根本不需要记任何一个快捷键或者构造什么表达式

当我错过这些功能自动的时候, 或者想它再次出现的时候, 也不需要任何命令或者快捷键或者构造任何表达式
对自动完成,继续输入1个字符即可。
对列出成员,参数提示, backspace然后重新输入.、->、::即可。



-------- -------- -------- 理想的功能 -------- -------- -------- --------

每个人都有自己需要的功能。
也许该功能对你而言是没有作用的, 甚至是有害的, 但这不足以称为“vim不提供该功能,所以它优秀”的论据。

看看这些评论:
原帖由 progliker 于 2009-7-30 23:16 发表
看样子LZ是IDE用惯了。

原帖由 hotoldbaby 于 2009-7-31 12:02 发表
linux是分散开发模式,不收钱,免费模式。
你是被微软惯的懒了,被微软洗脑了。
Linux玩法是不一样的。
所以你也许可以在vim上自己增加这个功能,还真是不错的想法。


是否"vim提供的功能"就一定是提高效率的(未必,见“鼠标与键盘”)?
是否"vim不提供的功能"就一定是“无用的”、“被洗脑”?

是否凭自己是vim用户或linux用户就可以持有一种优越感

我也不想和他们争论了,就让他们继续自己骗自己吧


-------- -------- -------- 鼠标与键盘 -------- -------- -------- --------

windaoo是务实的人, 所以我现在来回答:
原帖由 windaoo 于 2009-7-30 18:25 发表
f, w, b, e, 等这些命令,以及它们的大写
一些组合功能,比如 df, cw, d%, 3p, 3==, 等 等
还有与 ctags + cscope 配合的跳转功能


如果ls知道怎么在vim中实现我上面提到的那3个功能, 还望赐教啊~~~


w : ctrl + ->
b : ctrl + <-
e : 我不知道, 不过有个迂回的办法……
e : ctrl + -> , <-
ge: ctrl + <-

f,df, cw, d%, 3p, 3== : 我不知道它们是做什么的……………………

ctags + cscope
goto declaration (menu + a)
goto definition (menu + g)


回答完毕。


首先, 我得承认, 在“修改代码”的时候, 如果能熟练使用这些命令, 也许真的会提高编辑效率。
(“首次录入代码”的时候,自动完成和参数提示才是最重要的功能。这时候根本不需要这些插入符定位命令)
但提高也是有代价的, 要熟练使用这些命令并不是简单的工作。


要熟练到什么程度? 我举个例子:
原帖由 redspider 于 2009-7-31 09:27 发表
简单举个例子,俺要移动第5行至第13行到第1257行下面,没有编辑器能比 Vim 做得更高效。


首先,要对完成这个案例的命令很熟。

其次!!!常被人忽略的是, “第5行至第13行到第1257行下面”,5131257是怎么得来的???
为什么要移动5到13行? 而不是6到12行?  因为你看中的是那些行上的代码, 而不是行号。 1257也是。
行号还比较简单, word怎么办
要熟练到“看到一段代码,就知道这代码有几个word”比“鼠标直接选取该段文本”更快, 这绝对不是一个很容易完成的事情。


原帖由 windaoo 于 2009-7-30 19:14 发表
一是因为我觉得对我来说投入真的没有多高

那是你已经习惯了(同时还可以见下面”初学者“那段讨论)。

小结,要想将vim的编辑功能发挥出来(至少发挥到比使用鼠标快的地步), 绝对不是轻松的事情。

让代码简洁,清晰,并且足够快?
还是让代码繁琐,但达到最快?

是使用鼠标, 并且足够快?
还是记住繁杂的命令,并达到最快?

别忘了, 相对于鼠标, 那些命令也是要占用的脑cpu更多。
前者直观的选择文本。
后者,对于以word为单位的那些定位, 难道你们真的可以不数,数也不会数错?

我们不是打字员, 而是程序员。
我们输入的不是文字, 而是代码。 在输入代码的同时,还要考虑其他很多事情(比如下面即将谈到的事情)。



-------- -------- -------- vim是否值得学 -------- -------- -------- --------

我也说了, vim是值得学的(我自己都打算去学), 如果你要写很多种不同的代码的话。
还有个很值得考虑的原因:
原帖由 redspider 于 2009-7-31 09:27 发表
第三点就是: Vim 可以运行在很多平台下,在不同的环境下保持相同的操作习惯,也应该算效率的一个方面




否则, 如果只写一种代码, 就得考虑一下了。
即使熟练使用vim, 将它的编辑功能发挥到极致, 但别忘了它也仅仅是个编辑器
它有它的长处, 也有它的短板。


我知道这种贴最后很难有好下场, 但我还是回了。

一是想揭露vim的短处:比如该贴最开始提到的几个功能,还有即将说到的调试功能。 希望能给初学者们一些好的建议, 而不是一味的听到”vim神话“。
(当然,是我认为好的建议。它是不是真的好? 难说…… 所以需要讨论……)

这里回答问题的人肯定都不算初学者, 能设身处地的为它们考虑么?

愿意看到他们折腾一周的vim, 再折腾一周gcc和make, 才能开始学习C/C++语言?

VS的编辑器的学习成本可以说几乎为0。 它唯一的学习成本可能就是工程管理, 和学习make应该算是同一数量级的。


第二个原因嘛, 是希望各位多多暴露出vim的优势, 比如windaoo和jamesr已经暴露出一些vim中可以完成, 而其他编辑器中无法完成的功能了。


-------- -------- -------- 下面说调试问题 -------- -------- -------- --------
原帖由 windaoo 于 2009-7-30 19:14 发表
为什么你会觉得很牵强,开两个窗口切换很累吗?又不用老是切来切去


你觉得是在一个窗口上好, 还是两个窗口来回切好? 是前者方便, 还是后者方便?
这明显是一种不怎么方便的方式, 为什么你一定要说它“没什么不方便”。

所以我说牵强。


关于调试,gdb我不会(否则我真的可以不用vs了……), kgdb也不知道能达到什么效果。
我只能大致描述一下, vs的调试器能显示什么。

-------- -------- -------- 各窗口介绍 -------- -------- --------

-------- -------- 1. 编辑窗口 -------- --------

编辑窗口上可以显示变量参数鼠标移上去就ok
可以切换到反汇编窗口(menu + d, 切换回源代码 menu + g) 。

截一段代码吧:

    31:     printf("hello world\n" ) ;
00411BE2 68 50 EA 41 00   push        offset string "hello world\n" (41EA50h)
00411BE7 FF 15 30 45 42 00 call        dword ptr [__imp__printf (424530h)]
00411BED 83 C4 04         add         esp,4

这上面包含有如下信息(每一类信息都可以单独开或关):
1. 源代码(以及行号) 比如    31:     printf("hello world\n" ) ;

源代码对应的汇编代码在该行源代码之后, 下一行源代码之前。
每行是一条指令, 以下分析第1条指令
00411BE2 68 50 EA 41 00   push        offset string "hello world\n" (41EA50h)

在vs的编辑窗口中, 该指令依次显示了如下信息。

2. 地址
该条指令的地址是00411BE2

3. 机器码
该条指令的机器码是68 50 EA 41 00
第1字节是0x68, 在x86上是push指令。后4个字节是push的操作数。

4. 汇编代码
上面5字节机器码是一条指令 push 双字立即数


5. 符号名
x86上使用小端,双字立即数50 EA 41 00其实是0041EA50h。
那0041EA50h地址上到底是什么呢?  是一个string literal ("hello world\n " )的地址。

如果关闭符号名显示, 该行就只会显示
... push 0041EA50h

下一行也只会显示
... call        dword ptr ds:[00424530h]

是 push "hello world\n" ; call printf ;清晰呢
还是 push 0041EA50 ; call 00424530 ;清晰?


顺便说, 在编辑窗口上, 依然鼠标指向变量、寄存器的时候, 值会显示出来
也别说只有“汇编代码”的信息才是有用的,“机器码、地址、符号名”没用。
在我研究动态构造机器码时,这3种信息帮了我不少忙。

我知道,gdb也绝对是可以获取这些信息的。
但在vs中, 所有的信息都不需要敲任何一条命令,vim能配置到这么方便吗?

不要说敲变量名就比鼠标移动更快。 有键盘敲得快的人, 也有鼠标移得准的人。
鼠标移动是常数时间(反应时间,跟屏幕大小无关), 敲键盘还得看变量名有多长……

说点题外话, vim提供的很多命令, 都是作为鼠标的替代品而已。
像上面那种按单词, 按n个单词, 按行什么的命令, 如果使用鼠标, 根本就不需要记那么多东西, 当然熟练之后的速度可能会比不上键盘。

但就这个案例“调试时显示一个变量(寄存器)的值”, 我不觉得有比“鼠标移动上去就显示”更快捷的方案。


-------- -------- 2. 线程 -------- --------

多少个线程就有多少个条目。
每个条目有:每个线程id, 入口函数,当前活动函数, 优先级。

鼠标双击将切换到对应线程的堆栈。

btw:
其实都有很傻的键盘接口:tab,上下左右,回车。 只是使用鼠标习惯了。

调试时还需要疯狂的输入代码吗?
调试时,我脑袋里应该想“到底出了什么bug”,还是“我要通过什么命令才能看到那个值”???


-------- -------- 3. 调用堆栈 -------- --------
从上往下, 调用链由深到浅。
每一层是一个函数, 包含的信息有:函数所在模块(调试dll时会用到), 函数实际参数(也就是说能显示参数的值)。
双击可以切换到某一层函数,将更新控制线、局部变量等东西。

-------- -------- 4. 寄存器、局部变量、自动窗口、watch -------- --------
寄存器、局部变量、自动窗口、watch:
只有watch是可以随意添加和删除条目的, 其他窗口的条目都是固定的。

寄存器窗口:
固定显示一些寄存器的值。
(我也不清楚x86上到底有多少寄存器,显示的有这些:EAX EBX ECX EDX ESI EDI EIP ESP EBP EFL)

局部变量窗口:
当前函数上,控制线处还处于局部作用域的变量。

自动窗口:
显示被该条指令影响的所有寄存器、变量(包括临时变量,比如返回值)

顺便一提, 他们都是自动更新的, 执行一条指令后,如果某变量(寄存器)有改动, 显示的值就会有跟新,并会显示为红色


-------- -------- -------- 窗口布局 -------- -------- --------

如果这么多窗口还是要切来切去就没意思了。
所有的这些窗口都是一个整体, ide窗口是它们的容器。要怎么排列就看自己了。

[ 本帖最后由 OwnWaterloo 于 2009-7-31 14:39 编辑 ]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
27 [报告]
发表于 2009-07-31 14:43 |只看该作者

回复 #22 jamesr 的帖子

原帖由 jamesr 于 2009-7-30 20:30 发表
绝大多数的操作,VIM可以更快的完成,就那删除来说:删除一行只要dd就行了,删除一个单词dw,删除3个单词d3w,删除从光标到行尾d$,删除一个由{}围起的代码块d%……


说了这么多, 终于提到了vim的一个优势, d%。

按行操作, 大家速度都不会差到哪去。
按word操作, 上面也说了, 数word是件不容易的事。
d3w, 这3个字母敲起来当然快, 但得到那个"3"还是需要时间的, 还是会算错的。




原帖由 jamesr 于 2009-7-30 20:30 发表
由于HTML中DIV套DIV,表格套表格,有十多层嵌套,我想让HTML部分按照空2格对齐,而PHP和JS部分按空8格对齐

这需要配置vim吗???

原帖由 jamesr 于 2009-7-30 18:11 发表
vim需要麻烦的配置吗?
我只是使用基本的功能,几乎不用配置!

这话是谁说的?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
28 [报告]
发表于 2009-07-31 14:44 |只看该作者

回复 #24 apple753357 的帖子

这个功能在VA中叫Snipptes。
如果只是ls提到的那种, 没有更高级的变化, VA也是可以做到的。

论坛徽章:
0
29 [报告]
发表于 2009-07-31 16:11 |只看该作者
原帖由 OwnWaterloo 于 2009-7-31 14:43 发表


说了这么多, 终于提到了vim的一个优势, d%。

按行操作, 大家速度都不会差到哪去。
按word操作, 上面也说了, 数word是件不容易的事。
d3w, 这3个字母敲起来当然快, 但得到那个"3"还是需要时间的 ...

看回帖风格就是个严谨的人,

不仅是 % ,还有 )、}
全键盘操作模式使得 Vim 中使用宏比任何编辑器都简单。
甚至可以方便地修改它,在使用中对于复杂且只有很小区别的操作来说非常方便,不用重录

对代码来说可能按行号操作并不是非常常用,但是 Vim 是文本编辑器,俺还用它来做简单的数据处理,每天都用到按行号处理文本的操作,几十万行的数据处理起来还是很轻松的。

可视模式对于无固定模式的选择还是非常方便的,实在不行,不要忘了 Gvim 也支持鼠标。

历史命令行、自动命令补全让 Vim 并不像想象中的复杂。
极其简单的外部程序调用操作。俺不会 Vim Script,但是写了很多 perl 程序来帮助 Vim 做复杂数据处理 :wink:


俺觉得 Vim 编辑器之神的称号当之无愧,但是不要期望神在每个方面超越每个人
对于是否值得学,当然是因人而异的,如果你已经掌握了一种你自己认为足够强大或者够用的编辑器,也没有必要一定去学 Vim.
另外,生活在 word Excel ppt 中的人 Vim 似乎只是浪费他们的时间。

OwnWaterloo 我是非常推荐您尝试一下 Vim,俺的广告词是:“又好用,又好玩”

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
30 [报告]
发表于 2009-07-31 16:35 |只看该作者

回复 #29 redspider 的帖子

原帖由 redspider 于 2009-7-31 16:11 发表
OwnWaterloo 我是非常推荐您尝试一下 Vim,俺的广告词是:“又好用,又好玩”


嗯嗯, 我会去学的。
其实已经尝试过很多次了, 但最近要考研, 没什么时间……
我自己都很晕……   还有5个月就要考试, 自己还在成天泡论坛……

原帖由 redspider 于 2009-7-31 16:11 发表
不仅是 % ,还有 )、}
历史命令行、自动命令补全让 Vim 并不像想象中的复杂。


其实从你们的回帖中,我获益良多~~~
知道哪些功能是最常用的了~~~


原帖由 redspider 于 2009-7-31 16:11 发表
俺觉得 Vim 编辑器之神的称号当之无愧,但是不要期望神在每个方面超越每个人  


我真的是认同这句话的。
但这不等于对每个人(尤其是新手), 都应该一成不变的说”去学vim“, 对吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP