您好我正在学习C ++并且最初使用了命令行...然后我开始使用Xcode(从那以后无法切换回命令行)并且只是想知道一些具体的原因/情况要使用命令行而不是IDE ...
答案 0 :(得分:30)
对大型系统更有效 - 尝试打开包含100个项目和10,000个文件的VS解决方案。
对于很多任务来说比较简单,你可以在一个窗口中编辑,在另一个窗口中运行make,在第三个窗口中运行gdb。
更容易自动化任务,如果每个人都有gcc和vi(或emacs),通常更容易在团队或跨平台工作
答案 1 :(得分:14)
对我来说很重要的是编辑。我真的很喜欢vim,并且很少有IDE具有良好的vim仿真 - 特别是因为我使用dvorak并且必须重新映射很多密钥。对于很多其他人来说,除了他们选择emacs之外,他们会说同样的事情。
与vim或emacs相比,大多数IDE编辑都很苍白。有些功能你错过了或者很难很好地工作。例如,ctags肯定可以帮助你跳到vim中的函数定义,但它远远不如许多IDE可以做的那么好,因为它们实际上理解了语言。当然,调试器集成和项目管理等在vim或emacs中也不会起作用,因为它们不是完整的IDE(尽管你可以用它们做很多事情)。但通常情况下,vim或emacs的强大功能会掩盖IDE对它们的影响。
此外,就命令行编辑而言,当您无法访问具有GUI的环境时,它们可以在命令行上运行,因此在很多情况下,这种灵活性是一个很大的优势
当然,如果你能将vim或emacs的所有强大功能与一个完整的IDE结合起来会很棒 - 并且有一些尝试这样做 - 但它总是存在问题,甚至是最好的尝试远非完美。因此,您经常会遇到vim或emacs的选择以及它们带来的功能,或者IDE带有它带来的功能。
编辑:进入为什么vim或emacs在许多方面比你的典型IDE可能会变得非常冗长,并且已经有几个关于SO的问题。
这是关于emacs的一个很好的答案:https://stackoverflow.com/questions/35809/why-are-vi-and-emacs-popular/35929#35929
这是一篇关于vi的好文章,似乎经常与http://www.viemu.com/a-why-vi-vim.html
相关联为了快速尝试我给出一些理由,为什么vim更强大:
从文本编辑的角度来看,典型的IDE基本上是一个加强的记事本。您键入文本并使用鼠标进行导航(虽然有时非常有用,但它可能比使用键盘慢得多)。他们添加了特定于代码的功能,如代码完成,自动代码缩进,跳转到函数定义的能力,重构工具等等(因此IDE可以如此有用)但是他们的基本文本编辑功能通常很差。他们可能会添加一些有用的功能,如ctrl-d来删除一行,但与你在vim或emacs中获得的内容相比,他们添加的内容通常非常。
以删除(非常基本的操作)为例。在vim中,您可以对任何动作命令使用删除操作,从而可能有大量的删除方式。
dd
删除整行。5dd
删除5行。dj
向上移动光标,删除当前行左侧的所有内容以及上方右侧的所有内容。dG
删除从此处到文件末尾的所有内容。7dgg
删除此处与第7行之间的所有内容。d%
移动到与下一个paren或大括号匹配的大括号或paren(以先到者为准)并删除此处和之间的所有内容,包括您跳到的大括号或paren dw
删除此处与单词的下一个开头之间的所有内容de
删除此处与单词的下一个结尾之间的所有内容D
删除此处与行尾之间的所有内容d0
删除此处与行首之间的所有内容d^
删除此处与该行第一个单词开头之间的所有内容dty
删除此处与此行中下一次出现y之间的所有内容(如果此处与行尾之间没有y,则删除任何内容)列表一直在继续。这只是为了删除。其他基本命令的完整列表也是如此。这只是基本的命令。有许多更多的命令更先进,功能更强大。 Vim可以做很多事情,大多数使用它的人只使用它能力的一小部分。
大多数IDE甚至没有这种编辑功能的一小部分。他们有许多其他特定于编程和特定于语言的功能,vim和emacs要么缺乏,要么更难以开始工作 - 例如良好的,上下文敏感的代码完成,重构工具,项目管理等等。对于文本编辑功能,大多数IDE都无法比较。
答案 2 :(得分:3)
至少在UNIX中,命令行工具成熟。我必须处理的错误在这一点上非常模糊。 vi,make,gcc,gdb - 这些工具在某些情况下是20年或更长时间。经过试验,测试,证实。
此外,他们无处不在。每个人都有vi,make,gcc。我不必担心没有我的工具du-joir。我可以去几乎任何人的盒子,没问题,我可以编译,编写,调试,而无需学习一些奇特的工具。
答案 3 :(得分:2)
首先,选择越来越多。如果您使用IDE,则使用与其特别兼容的工具,这可能不是您喜欢的工具。在集成软件包中或作为组件可以获得很多东西,人们可以双管齐下。
其次,许多开发人员已经习惯了Unix工具,这些工具已经成熟,功能非常强大,并且可以单独使用。在微软Windows上没有类似的传统,自从Turbo Pascal以来,IDE已经统治了那里。 (Turbo Pascal的最大优势在于,在任何类型的多任务处理之前的日子里,没有必要启动和停止编辑器,然后在运行测试之前单独运行编译器和链接器。)
第三,从命令行自动执行任何操作都非常非常容易。在任何类型的GUI中执行此类操作都比较困难,因为这些工具难以开发,而且难以学习。同样,这里存在文化差异,因为Unix的传统是通过自动化处理复杂的程序,而微软的传统是构建GUI和向导。
第四,对于处理复杂系统,仍然没有比人类可读的文本表示明显更好的方法。 Unix makefile的语法很糟糕,但是它可以避免我最近遇到的问题,在一个案例中,Visual C ++项目文件的一个设置中的后构建步骤的配置是错误的,并且很难发现。使用makefile和vim,我可以简单而可靠地更改给定项目的编译和构建方式。使用Visual Studio会更加困难。
答案 4 :(得分:0)
如果要自动化软件构建,可以使用命令行。这通常在您准备发布软件时完成,除了软件编译之外,您还需要执行其他操作,例如安装程序打包,然后才能将软件交付给用户。
除此之外,您应始终使用IDE进行调试,编译和代码编辑。
答案 5 :(得分:0)
命令行构建可以自动化,并且使用CMake等标准工具为命令行构建跨平台构建此类构建(请注意,您可以使用xcodebuild从命令行构建Xcode项目,但是仅适用于带Xcode的Mac OS X)。自动化非常重要,因为它允许您为您的版本控制系统创建一个“钩子”来构建项目并拒绝无法编译的代码或让持续集成服务器定期构建您的项目,以便您可以轻松判断何时对代码进行了更改并快速修复它们。
除了可移植性和自动化之外,命令行更快。如果您正在使用Makefile项目或类似C++ Project Template使用CMake但具有Makefile包装器的项目,那么只需要构建简单的命令“make”即可。第二次构建时,你只需要点击向上箭头,然后点击ENTER以重新运行“make”。虽然使用命令行的初学者可能不是很快并且可能更容易找到GUI / IDE,但是一旦使用命令行一段时间,它变得比使用GUI更快,并且所有这些鼠标移动和点击似乎慢,浪费精力。