# What IDE Or Editor Do You Use?



## Kreij (Mar 8, 2013)

Just out of curiosity, to get some insight and to spark a little discussion I thought I would bring this up in this section.

What IDE or editor to you use to write your code?
What features do you like and what are good plug-ins or enhancements?
Features can be things like highlighting, code completion, versioning, etc.

Many people use more than one as they don't all fit the bill for all types of coding environments and languages, so feel free to comment on what suits you the best in various scenarios ... and please state the type of languages you use with them.


----------



## dcf-joe (Mar 8, 2013)

I use Visual Studio 2012 Ultimate for my C# coding and a little bit of C++.

I am getting into Android development, so I downloaded the ADK from Google which comes with Eclipse already setup to work with android.

I use notepad when I am teaching myself HTML.


----------



## hellrazor (Mar 8, 2013)

Right now I'm using Pluma (because I'm running Linux Mint and MATE), but back in the days I really enjoyed Notepad++.


----------



## FordGT90Concept (Mar 8, 2013)

Visual Studio 2010 (just updated to 2012, kind of don't like it) for C#, VB, ASP, and XAML. EditPlus for everything else (flat files, HTML, CSS, PHP, Javascript, etc.).

VS, I really like the auto-complete and debugger.  EP, I really like the syntax highlighting and all the options it has for manipulating documents (e.g. column select).  I don't use plugins for either.


----------



## W1zzard (Mar 8, 2013)

Visual Studio 2010 for C++/.NET (must have Visual Assist plugin installed)
Eclipse for Android
UltraEdit for PHP, HTML


----------



## Easy Rhino (Mar 8, 2013)

eclipse for JAVA. vim for PHP,HTML,CSS,BASH,CSH,ZCH. ultraedit and TOAD for PL/SQL.


----------



## Disparia (Mar 8, 2013)

When provided by employer (free), I do like Dreamweaver for HTML/PHP. None of the tools or anything like that - just the code view. Has excellent hinting, highlighting, etc.

Most of the time I'm in: http://www.sublimetext.com/
Nice and light, no need to create a project. Had a few irritating default actions (code hint select with tab), but much better now that I've set options to how I like it.

Visual Studio Express for C++/C#.

I tried Netbeans to unify Java, PHP, and C++ development under one IDE, but didn't like it that much. Felt clunky. Only keep it installed for the rare time I need to do some Java.


----------



## Easy Rhino (Mar 8, 2013)

Jizzler said:


> I tried Netbeans to unify Java, PHP, and C++ development under one IDE, but didn't like it that much. Felt clunky. Only keep it installed for the rare time I need to do some Java.



i do not like netbeans for java. eclipse is great and has a nice plugin if you need to do J2EE stuff.


----------



## Mindweaver (Mar 8, 2013)

Right now..


vb6, Vbs 2010, 2012 (_I still use vb6 on a few things, but I'm slowly moving everything over to 2010_)
SQL Server Management studio
Sybase Central
Toad (I don't use it as much anymore)
Notepad++
I'm sure I'm forgetting something (_Some stuff I may not touch for a month_)....


----------



## digibucc (Mar 8, 2013)

I found and love JetBrains PHPStorm. they have some other IDEs for different languages, but this is the one I use. Before that I used Notepad++ but for real work it's just easier with an IDE.


----------



## CrackerJack (Mar 20, 2013)

Visual Studio 2010/2012
Dreamweaver

Been thinking about getting into Android programming.



W1zzard said:


> Visual Studio 2010 for C++/.NET (must have Visual Assist plugin installed)
> Eclipse for Android
> UltraEdit for PHP, HTML



That's the name of that plugin! I couldn't find it forever till just now! Thanks


----------



## Aquinus (Mar 20, 2013)

I don't really use any IDEs. I have VS 2012 handy so I can mess around with .NET occasionally, but more often than not whatever I need to write I can write using just VIM.

So I write the following using only VIM in *nix land:
PHP, Ruby, Java, BASH, C, Python (rarely,), and SQL for PostgreSQL.

The only languages I've written where I've used an IDE are:
Netbeans with Java (for shits and giggles, I typically use just VIM when it comes to Java.)
MiniIDE with HCS12 assembly.
C# in VS.NET. (Currently have 2012 express installed but I do have a copy of 2008 Ultimate and Team Dev as well as 2010 Ultimate.)

More often than not when I'm using an IDE, I'm developing in Windows and not *nix.

I'm not going to lie though, programming assembly was a lot of fun with a HCS12-based micro-controller. I just don't have the time for it and I would need to pickup another dev board to do it.

Sample (this is an old bit  of an old version of a program I wrote several years ago, I could paste the entire thing but its over 500 lines of assembly I changed my mind, I think I have an older version of the application but I'll just post the entire thing up anyways. ):

```
#include        Reg9s12.h

;---------- START OF CONSTANTS -------------------
;---------- KEYPAD CONSTANTS ------------------
MAXLN:		equ		8
DIGIT0:		equ		8
DIGIT1:		equ		4
DIGIT2:		equ		2
DIGIT3:		equ		1
;---------- LCD CONSTANTS ---------------------
ONE_MS:		equ		4000        ; 4000 x 250ns = 1 ms at 24 MHz bus speed
FIVE_MS:	equ		20000
TEN_MS:		equ                40000
FIFTY_US:   equ                200


DB0:        equ     1
DB1:        equ     2
REG_SEL:    equ     DB0        ; 0=reg, 1=data
NOT_REG_SEL:equ     $FE
ENABLE:     equ     DB1
NOT_ENABLE: equ     $FD

LCD:        equ     portk
LCD_RS:     equ     portk
LCD_EN:     equ     portk

REGBLK:     equ     $0

STACK:      equ     $2000
;---------- END CONSTANTS ---------------------

;----------------------------------------------------------------------------------------
;---------- Start Variables -------------------
			org        $1000
;------ Keypad Vars ----------
;-- Password --
passwd:		rmb		4 ; Password will be stored in the last 4 bytes of EEPROM.
tmppasswd:	rmb		4
pwchkvalid:	rmb		1
spstr:		fcc		"Set New Password"
spsetstr:	fcc		"New Password Set"
epstr:		fcc		"Enter Password  "
;-- Main Loop Vars --
incount		rmb		1
strpt		rmb		1
;-- Delay Variables.
R1:         rmb     1
R2:         rmb     1
R3:         rmb     1
;-- keypad output store
KEY:        rmb     1
TEMPKEY:	rmb		1
KEYS:       rmb     8
;------ LCD Vars -------------
pkimg:                rmb                1
temp1:                rmb                1
;str1:                rmb                16     ;line 1 string variable
str1:                fcc                "                " ;initialize as blank..
cnt1:                rmb                1         ;line 1 length variable
;str2:                rmb                16     ;line 2 string variable
str2:                fcc     "                " ;initialize as blank..
cnt2:                rmb     1       ;line 2 length variable

LCDimg:                equ                pkimg
LCD_RSimg:        equ                pkimg
LCD_ENimg:        equ                pkimg
;----------------------------------------------------------------------------------------

;---------- START OF PROGRAM ------------------
			org     $2000
            lds     #$2000  ; Initialize the stack.
            ldaa    #16              ; just for testing, replace with buttons
            staa    cnt1            ; ditto
            staa    cnt2            ; ditto
			ldaa	#0
			staa	strpt
			staa	incount

			jsr		SETPASSWD

			jsr		CHKPASSWD

lp1:        jsr     GETKEY
            ldab    KEY
            ldx		incount
			stab	str1,x
			inx
			stx		incount
            jsr     LCDOUT
            jmp		lp1
            end

;----------------------------------------------------------------------------------------
;----------------------------- SUBROUTINES! ---------------------------------------------
;----------------------------------------------------------------------------------------

;-------------------------------
;-- Set password subroutine. ---------------------------------------------
;-- Check 4-char string starting at address stored in index register x. --
;-------------------------------------------------------------------------
SETPASSWD:	clr		incount
			ldx		#0
SPSLOOP:	ldaa	spstr,x
			staa	str1,x
			inx
			cmpx	#16
			bne		SPSLOOP
			jsr		LCDOUT
			
			ldx		#0
SPNEXTKEY:	jsr		GETKEY
			ldaa	KEY
			staa	passwd,x
			ldaa	#$2A
			staa	str2,x
			inx
			jsr		LCDOUT
			cmpx	#4
			bne		SPNEXTKEY
			jsr		LCDOUT

			ldx		#0
pwsetlp:	ldaa	spsetstr,x
			staa	str1,x
			inx
			cmpx	#16
			bne		pwsetlp
			jsr		LCDOUT

			rts

;-------------------------------
;-- Check password subroutine --
;-------------------------------
CHKPASSWD:	clr		incount
			ldx		#0
CPSLOOP:	ldaa	epstr,x
			staa	str1,x
			inx
			cmpx	#16
			bne		CPSLOOP
			jsr		LCDOUT
			
			ldx		#0
CPNEXTKEY:	jsr		GETKEY
			ldaa	KEY
			staa	tmppasswd,x
			ldaa	#$2A
			staa	str2,x
			inx
			jsr		LCDOUT
			cmpx	#4
			bne		CPNEXTKEY
			jsr		LCDOUT

;-- At this point the passwd has been entered.

			ldx		#0
checkpwlp:	ldaa	passwd,x
			ldaa	tmppasswd,x
			cba
			bne		cp_fail
			inx
			cmpx	#4
			bne		checkpwlp
			cmpx	#4
			beq		cp_pass

cp_pass:	ldaa	#1
			staa	pwchkvalid
			rts
cp_fail:	ldaa	#0
			staa	pwchkvalid
			rts
;----------------------------------------------------------------------------------------
;----------------------------- Get key from keypad subroutine ---------------------------
;----------------------------------------------------------------------------------------
KEYRETURN:	ldaa	TEMPKEY
			beq		INITCHECK
			staa	KEY
			puld
			rts

GETKEY:		clr		KEY
			clr		TEMPKEY
            pshd
            ldaa        #$F0
            staa        ddra
            ldaa        #$ff
            staa        ddrb,x
            staa        ddrj,x
            bclr        ptp,x,DIGIT0
            bset        ptp,x,DIGIT1
            bset        ptp,x,DIGIT2
            bset        ptp,x,DIGIT3
;--------- POLLING HERE! ----------------------
POLL:		
			ldaa	KEY
			ldab	#0
			cba
			beq		KEYRETURN
			cba
			bne		SET_TK

SET_TK:		staa	TEMPKEY
INITCHECK:  bclr    porta,#%11110000        ; This disables all other bits.
			bset    porta,#%00010000        ; This is first row.
			jsr		DELAY
CHECKROW1:  jsr     DELAY

            brset   porta,#%00010001,D1
            brset   porta,#%00000010,D2
            brset   porta,#%00000100,D3
            brset   porta,#%00001000,D_A
            jmp		CHECKROW2;

;--------- DISPLAY FOR 7SEG DISP. --------------

;--------- DISPLAYS FOR FIRST ROW -------------
D1:                        ldaa    #$31
                        staa    KEY
                        jmp     POLL

D2:                        ldaa    #$32
                        staa    KEY
                        jmp     POLL

D3:                        ldaa    #$33
                        staa    KEY
                        jmp     POLL

D_A:                ldaa    #$61
                        staa    KEY
                        jmp     POLL

;----------- Check row 2 ----------------------
CHECKROW2:        asl     porta

                        brset   porta,#%00000001,D4
                        brset   porta,#%00000010,D5
                        brset   porta,#%00000100,D6
                        brset   porta,#%00001000,D_B
                        jmp                CHECKROW3
;----------- DISPLAYS FOR SECOND ROW ----------
D4:                        ldaa    #$34
                        staa    KEY
                        jmp     POLL

D5:                        ldaa    #$35
                        staa    KEY
                        jmp     POLL

D6:                        ldaa    #$36
                        staa    KEY
                        jmp     POLL

D_B:                ldaa    #$62
                        staa    KEY
                        jmp     POLL
;------------- CHECK ROW 3 -----------------
CHECKROW3:        asl     porta

                        brset   porta,#%00000001,D7
                        brset   porta,#%00000010,D8
                        brset   porta,#%00000100,D9
                        brset   porta,#%00001000,D_C
                        jmp                CHECKROW4
;------------- ROW 3 -----------------------
D7:                        ldaa    #$37
                        staa    KEY
                        jmp     POLL

D8:                        ldaa    #$38
                        staa    KEY
                        jmp     POLL

D9:                        ldaa    #$39
                        staa    KEY
                        jmp     POLL

D_C:                ldaa    #$63
                        staa    KEY
                        jmp     POLL

;-------------- CHECK ROW 4 ----------------
CHECKROW4:        asl     porta

                        brset   porta,#%00000001,DSTAR
                        brset   porta,#%00000010,D0
                        brset   porta,#%00000100,DPOUND
                        brset   porta,#%00001000,D_D
                        ldaa    #0
			stab	KEY
                        jmp     POLL ;; Restart, nothing left to check.
;-------------- ROW 4 ----------------------
DSTAR:                ldaa    #$2A
                        staa    KEY
                        jmp     POLL

D0:                        ldaa    #$30
                        staa    KEY
                        jmp     POLL

DPOUND:                ldaa    #$23
                        staa    KEY
                        jmp     POLL

D_D:                ldaa    #$64
                        staa    KEY
                        jmp     POLL
        
;----------DELAY
DELAY:                PSHA                ;Save Reg A on Stack
                        LDAA    #100                ;
                        STAA    R3                  ;
;--1 msec delay. The D-Bug12 works at speed of 48MHz with XTAL=8MHz on Dragon12+ board
;Freq. for Instruction Clock Cycle is 24MHz (1/2 of 48Mhz).
;(1/24MHz) x 10 Clk x240x10=1 msec. Overheads are excluded in this calculation.
L3:                        LDAA    #5
                        STAA    R2
L2:                        LDAA    #240
                        STAA    R1
L1:                        NOP         ;1 Intruction Clk Cycle
                        NOP         ;1
                        NOP         ;1
                        DEC     R1  ;4
                        BNE     L1  ;3
                        DEC     R2  ;Total Instr.Clk=10
                        BNE     L2
                        DEC     R3
                        BNE     L3
;--------------
                        PULA                        ;Restore Reg A
                        RTS

;----------------------------------------------------------------------------------------
;--------------------------- END OF GET_KEY SUBROUTINE ----------------------------------
;----------------------------------------------------------------------------------------

;----------------------------
;-- Clear LCD out strings. --
;----------------------------
clear_strs:	pshx
			psha
			ldx		#0
			ldaa	#0

clrloop:	staa	str1,x
			staa	str2,x
			inx
			cmpx	#16
			bne		clrloop

			ldaa	#16
			staa	cnt1
			staa	cnt2

			pula
			pulx
			rts
			
;----------------------------------------------------------------------------------------
;--------------------------- START OF LCD SUBROUTINE ------------------------------------
;----------------------------------------------------------------------------------------

lcd_ini:        ldaa        #$ff
                        staa        ddrk                ; port K = output
                        clra        
                        staa        pkimg
                        staa        portk

                        ldx                #inidsp         ; point to init. codes.
                        pshb                    ; output instruction command.
                        jsr                sel_inst
                        ldab        0,x
                        inx
onext:                ldaa        0,x
                        jsr                wrt_nibble         ; initiate write pulse.
                        inx
                        jsr                delay_5ms       ; every nibble is delayed for 5ms
                        decb                    ; in reset sequence to simplify coding
                        bne                onext
                        pulb
                        rts
              
inidsp:                fcb                12                ; number of high nibbles
*                                ; use high nibbles only, low nibbles are ignored
                        fcb                $30                ; 1st reset code, must delay 4.1ms after sending
                        fcb                $30                ; 2nd reste code, must delay 100us after sending
        
; all following 10 nibbles must be delay 40us each after sending
                        fcb                $30             ; 3rd reset code,
                        fcb                $20                ; 4th reste code,
                        fcb                $20                   ; 4 bit mode, 2 line, 5X7 dot
                        fcb                $80                   ; 4 bit mode, 2 line, 5X7 dot
                        fcb                $00                ; cursor increment, disable display shift
                        fcb                $60                ; cursor increment, disable display shift
                        fcb                $00                ; display on, cursor off, no blinking
                        fcb                $C0                ; display on, cursor off, no blinking
                        fcb                $00                ; clear display memory, set cursor to home pos
                        fcb                $10                ; clear display memory, set cursor to home pos
*
sel_data:        psha
;                        bset        LCD_RSimg REG_SEL        ; select instruction
                        ldaa        LCD_RSimg
                        oraa        #REG_SEL
                        bra                sel_ins

sel_inst:        psha
;                        bclr        LCD_RSimg REG_SEL        ; select instruction
                        ldaa        LCD_RSimg
                        anda        #NOT_REG_SEL

sel_ins:        staa        LCD_RSimg
                        staa        LCD_RS
                        pula
                        rts

lcd_line1:        jsr                sel_inst                ; select instruction
                        ldaa        #$80                     ; starting address for the line1
                        bra                line3
lcd_line2:        jsr                sel_inst
                        ldaa        #$C0                     ; starting address for the line2
line3:                jsr                wrt_byte

                        jsr                sel_data
                        jsr         msg_out
                        rts        
;
; at entry, x must point to the begining of the message,
;           b = number of the character to be sent out
           
msg_out:        ldaa        0,x
                        jsr                wrt_byte
                        inx
                        decb
                        bne                msg_out
                        rts

wrt_nibble:        anda        #$f0                     ; mask out 4 low bits
                        lsra
                        lsra                            ; 4 MSB bits go to pk2-pk5
                        staa        temp1                         ; save high nibble
                        ldaa        LCDimg                    ; get LCD port image
                        anda        #$03                     ; need low 2 bits
                        oraa        temp1                    ; add it with high nibble
                        staa        LCDimg                    ; save it
                        staa        LCD                            ; output data to LCD port
                        jsr                enable_pulse
                        rts
*

;       @ enter, a=data to output 
;
wrt_byte:
                        pshx
                        psha                                ; save it tomporarily.
                        anda        #$f0                     ; mask out 4 low bits.           
                        lsra
                        lsra                                ; 4 MSB bits go to pk2-pk5                                
                        staa        temp1                         ; save nibble value.
                        ldaa        LCDimg                    ; get LCD port image.
                        anda        #$03                     ; need low 2 bits.
                        oraa        temp1                    ; add in low 4 bits. 
                        staa        LCDimg                    ; save it
                        staa        LCD                            ; output data          

                        bsr                enable_pulse
                        pula
                        asla                            ; move low bits over.
                        asla
                        staa        temp1                        ; store temporarily.
                        ldaa        LCDimg                         ; get LCD port image.
                        anda        #$03                           ; need low 2 bits.
                        oraa        temp1                          ; add in loiw 4 bits. 
                        staa        LCDimg                    ; save it
                        staa        LCD                            ; output data          

                        bsr                enable_pulse
                        jsr                delay_50us
                        pulx
                        rts

enable_pulse:
;                        bset        LCD_ENimg ENABLE        ; ENABLE=high
                        ldaa        LCD_ENimg
                        oraa        #ENABLE
                        staa        LCD_ENimg
                        staa        LCD_EN
        
;                        bclr        LCD_ENimg ENABLE        ; ENABLE=low
                        ldaa        LCD_ENimg
                        anda        #NOT_ENABLE
                        staa        LCD_ENimg
                        staa        LCD_EN
                        rts

delay_10ms:        pshx
                        ldx                #TEN_MS
                        bsr                del1
                        pulx
                        rts

delay_5ms:        pshx
                        ldx                #FIVE_MS
                        bsr                del1
                        pulx
                        rts

delay_50us:        pshx
                        ldx                #FIFTY_US
                        bsr                del1
                        pulx
                        rts
;
; 250ns delay at 24MHz bus speed
;
del1:                dex                                ; 1 cycle
                        inx                                ; 1 cycle
                        dex                                ; 1 cycle
                        bne                del1                        ; 3 cylce
                        rts
        
        
;;;;;;;;;;;FUNCTIONS TO CALL BY USER BELOW;;;;;;;;;;;;;;
LCDOUT:
			pshx
			pshy
			pshd
			jsr                delay_10ms                ; delay 20ms during power up
			jsr                delay_10ms

			jsr                lcd_ini                        ; initialize the LCD 
			jsr                disp                           ;display blank to start
			puld
			puly
			pulx
			rts
                              
disp:
                        ldx                #str1                        ; str1 for line1, x points to message 1
                        ldab    cnt1                     ; send out cnt1 characters
                        jsr                lcd_line1


                        ldx                #str2                        ; str2 for line2, cnt2 points to message 2
                        ldab        cnt2                     ; send out cnt2 characters
            
                        jsr                lcd_line2
                        jsr                delay_10ms
                        jsr                delay_10ms
;                        jmp                disp                       loop on display to refresh
                        rts        ;rts instead of auto-loop refresh

;----------------------------------------------------------------------------------------
;--------------------------- END OF LCD SUBROUTINE --------------------------------------
;----------------------------------------------------------------------------------------
```


----------



## syeef (Apr 18, 2013)

Dreamweaver CS5 for HTML, JS, CSS and PHP
NetBeans for JAVA/J2ME
Visual Studio 2010 for C# and VC++
Eclipse for Android
Notepad++ for everything


----------



## Castiel (Apr 19, 2013)

I work on a Mac, so for HTML, CSS, JavaScript, PHP, and Ruby I use TextMate.


----------



## librin.so.1 (Apr 23, 2013)

vim for everything 95% of the time. At the remaining 5% - gedit/pluma. (That "everything" is mostly C, bash and asm; Some C++ and Java; and li'l bit of other languages.)
I also used some nano before moving to vim and used a bit of VS2010ee and Dev-C++ while on my university computers.


----------



## Aquinus (Apr 23, 2013)

Aha! I have another to add to my list: emacs with EVIL. I'm starting to learn Clojure and apparently emacs is the tool to use for LISPs.


----------



## jonnyhocks (May 3, 2013)

I used to use Coda for all my HTML and CSS stuff.

I'm doing more PHP and Ruby so have moved over completely to Sublime Text 2.


----------



## Castiel (May 6, 2013)

jonnyhocks said:


> I used to use Coda for all my HTML and CSS stuff.
> 
> I'm doing more PHP and Ruby so have moved over completely to Sublime Text 2.



Sublime Text 2 is great, I use it on Windows when I work on my personal stuff. Kinda feels like Textmate on MAC.


----------



## Aquinus (May 7, 2013)

I despise using anything gui for languages that don't need it, so unless I'm using visual studio, I'm usually working on a *nix environment on a real server or on a VM that has no GUI tools whatsoever. Either way, if I'm using more than a terminal and a web browser, there is a problem.

You don't need to over-complicate code by adding bells and whistles. As long as it shows me the code, shows me it well, and lets me edit it quickly and efficiently there is absolutely no need for anything else. Plus, I like having regex search and replace, I would go nuts without sed and grep, and GIT is terrible to use with a GUI.

All in all, I only use Windows to house my SSH session and browser. If I'm on my mac at work, I do the exact same thing.

Remember: You get good at what you use a lot. The more you use it the better get at it and everything you need to do in VIM is pretty much a couple keystrokes away, never a click unless you're cheating and using GVIM.


----------



## digibucc (May 7, 2013)

I appreciate the highlighting, color settings (a dark background with different colored words is easier for me), as well as autocompletion and built in server sync, etc. unless i am missing what you mean by bells and whistles.

just because you get good at what you use doesn't mean it's the best option. you'll get really good at using a hammer if that's all you use but when the job calls for a pair of needlenose and you're only awesome with a hammer you're ill suited. why not get really good at the best option available, instead of being really good at the old way of doing something when there are newer (imho better) alternatives?

i'm just saying, no matter how good you are, making it harder for yourself doesn't make any sense. I don't see how things like built in libraries, highlighting, etc could possible make your work harder - and so to me it seems you are sticking to less developed methods with no real benefit over newer programs. the reason for this i don't know, but i can't think of a good one.


----------



## Aquinus (May 7, 2013)

digibucc said:


> I don't see how things like built in libraries, highlighting, etc could possible make your work harder - and so to me it seems you are sticking to less developed methods with no real benefit over newer programs. the reason for this i don't know, but i can't think of a good one.



Well maybe you should try a text-based editor so you actually know what you're talking about. Just because it's text based doesn't mean you don't have syntax highlighting, auto indentation, and the like. It's how it's delivered and the extent in which it is delivered. Maybe you should give it a try before bashing it. Hard to learn does not imply hard to use and anything is hard to use before you learn how to use it. Text-based is just harder because you don't have an easy to use interface to do thing which only snowballs functionality and quickly makes it take more time to do the same thing.








digibucc said:


> built in server sync



You're editor doesn't need to do that, you're complecting what the editor does if it does more than edits code. That's what rsync is for and if it's more complex than a single command then write a 
script.

Edit: Here, this is a good question on stack exchange about why some people use cli based editors. Everyone has their own reasons:
http://programmers.stackexchange.com/questions/195226/why-do-people-use-terminal-text-editors

Edit 2: I should also make this clear that this is for things that can run on *nix. If I'm using C# or any other MS product, I won't be using a cli editor because that isn't how MS rolls and there aren't better solutions on the cli.


----------



## Easy Rhino (May 7, 2013)

Aquinus said:


> I despise using anything gui for languages that don't need it, so unless I'm using visual studio, I'm usually working on a *nix environment on a real server or on a VM that has no GUI tools whatsoever. Either way, if I'm using more than a terminal and a web browser, there is a problem.
> 
> You don't need to over-complicate code by adding bells and whistles. As long as it shows me the code, shows me it well, and lets me edit it quickly and efficiently there is absolutely no need for anything else. Plus, I like having regex search and replace, I would go nuts without sed and grep, and GIT is terrible to use with a GUI.
> 
> ...



Have you ever worked on a large scale project with a dozen other developers? It is pure chaos if everyone uses VIM. You end up spending too much time going through each file updating methods,classes,objects etc after one little change in strategy. Using Netbeans or Eclipse makes it much easier. You can all work within a desired framework and let the IDE take care of developers tromping all over other people's code.


----------



## librin.so.1 (May 7, 2013)

Aquinus said:


> Plus, I like having regex search and replace, I would go nuts without sed and grep, and GIT is terrible to use with a GUI.



THIS^^^

A couple of more things:
When using vim, I can execute up to 2 advanced commands in the time it normally takes to _lift the hand from the keyboard and place it on a mouse properly_. i.e. I can execute commands before one would even get ready to start doing stuff on an IDE with a mouse. Since in IDEs control is quite mouse centered, it's quite an advantage for speed to NOT use an IDE.

Yep, GIT is so terrible under GUI, I kept thinking that everything is completely broken during the whole 30 minutes I used it under GUI through my life. On CLI it's a breeze & I love it.

At first I used gdb under a GUI frontend (KDbg). I then learned to use it in CLI. Surprise! Debugging goes much faster and easier while using gdb in command line. One strange reason for it is that I need to request gdb to show me things. Because of that, I center my attention on the things that are important and don't get tossed 'dem red herrings by the complete list of everything I get shown with a GUI frontend. The odd case of "less is more".

P.S. it always takes me a minute to get used to the fact the forums don't have 'dem vim's hjkl cursors, lol. 

EDIT: @Easy Rhino
I should point out that many FOSS developers on large projects use vim || emacs. For example: Wine - a large scale project indeed, with many developers. They all use git && (vim || emacs) [1]. No such chaos and/or stomping over whatsoever. 
[1]source - the developer mailing list.


----------



## digibucc (May 7, 2013)

Aquinus said:


> Well maybe you should try a text-based editor so you actually know what you're talking about. Just because it's text based doesn't mean you don't have syntax highlighting, auto indentation, and the like. It's how it's delivered and the extent in which it is delivered. Maybe you should give it a try before bashing it. Hard to learn does not imply hard to use and anything is hard to use before you learn how to use it. Text-based is just harder because you don't have an easy to use interface to do thing which only snowballs functionality and quickly makes it take more time to do the same thing.



I wasn't bashing anything, I said I didn't understand. I threw a disclaimer in there, that I was possibly misunderstanding what you meant by gui. I was. when you say gui, I think mouse and buttons. i'm guessing you meant wysiwig like dreamweaver or visual studio?. 

when you say you use cli I think of the most basic cli environment available. no mouse. yes it has highlighting and indentation but not much else, with what i consider a rudimentary autocomplete. to be honest it has been years since I have used vim, etc, but I see no reason to go back when what I use now does everything I need and more.



Aquinus said:


> http://www.techpowerup.com/forums/attachment.php?attachmentid=51040&stc=1&d=1367929653


regardless of the features I can't stand the look. For something I spend 10hrs in most days i'd rather not feel like i'm still in the 90s. that may be stupid to you but it matters to me. I like buttons and a file listing and more features than a cli offers.
http://www.soft32download.com/i/screen/PhpStorm.png
that's not my screen, as I customized my colors and layout, but it's close enough.




Aquinus said:


> You're editor doesn't need to do that, you're complecting what the editor does if it does more than edits code. That's what rsync is for and if it's more complex than a single command then write a script.


And I say you are complicating it by using multiple programs or scripts when one program CAN do everything you need. I can edit a file, and with a single keystroke upload & preview it. I can set up the program to keep files in sync automatically. why would I EVER use rsync or write a script when the program I am already using to edit the file can do it all for me?


Aquinus said:


> Edit: Here, this is a good question on stack exchange about why some people use cli based editors. Everyone has their own reasons:
> http://programmers.stackexchange.com/questions/195226/why-do-people-use-terminal-text-editors


honestly those sound like people who got used to one way of doing things and then found reasons to keep it. the only thing that makes sense is if you are already using terminal or you NEED to cli ssh for some reason. nothing else in that post is a good reason imo to keep using such an old method. this is NOT me bashing you, your skills, or your program. this is me saying I do not understand the reasoning and I wish that I could. 

I've seen your code, you are better than me by miles. but that doesn't mean I'm just going to accept that your method is better when it doesn't seem that way to me. To me it seems more likely that you are just that much better, and if you used current software you could be even more efficient.



Aquinus said:


> Edit 2: I should also make this clear that this is for things that can run on *nix. If I'm using C# or any other MS product, I won't be using a cli editor because that isn't how MS rolls and there aren't better solutions on the cli.


I should be clear I only do php professionally, and I do it all on windows. I've already explained how I think skill factors in though so my level of talent shouldn't preclude me from having an opinion... in my opinion 



Vinska said:


> Since in IDEs control is quite mouse centered, it's quite an advantage for speed to NOT use an IDE.



I completely disagree. Mouse should always be an option, hence my disdain for cli. however any programmer worth their salt should have everything they need bound to keystrokes, and should rarely if ever be using the mouse while inside their IDE. I have the buttons and menus for things I do rarely, and things I do 90% of the time are all tied to the keyboard. it would only take longer to accomplish something if I couldn't just use my mouse in those rare instances it's necessary. Or I would need to memorize keystrokes for things that I do less than 10% of the time, which isn't worth it.


----------



## Easy Rhino (May 7, 2013)

Vinska said:


> EDIT: @Easy Rhino
> I should point out that many FOSS developers on large projects use vim || emacs. For example: Wine - a large scale project indeed, with many developers. They all use git && (vim || emacs) [1]. No such chaos and/or stomping over whatsoever.
> [1]source - the developer mailing list.



It doesn't surprise me that an open source project would use vim and emacs. I am not saying one is better than the other. Anyone who does so has never spent any significant amount of time developing in a large corporate environment.


----------



## Aquinus (May 7, 2013)

Easy Rhino said:


> Have you ever worked on a large scale project with a dozen other developers? It is pure chaos if everyone uses VIM. You end up spending too much time going through each file updating methods,classes,objects etc after one little change in strategy. Using Netbeans or Eclipse makes it much easier. You can all work within a desired framework and let the IDE take care of developers tromping all over other people's code.



That's what a version control system is for. Pretty sure I mentioned git before. It does a pretty good job at merging code together and telling you about conflicts. Also if you're merging in changes and you're not reviewing how they've been merged in, that bad to begin with. You don't need a GUI to manage a framework for you. More software than not has some thought about how code for any particular part of a project should be written, hence why projects like Moodle have guidelines you must follow to contribute code back upstream.



digibucc said:


> I should be clear I only do php professionally, and I do it all on windows. I've already explained how I think skill factors in though so my level of talent shouldn't preclude me from having an opinion... in my opinion



There is a time and a place for GUI tools and I understand that. I also don't want you to think that I don't want you to have an opinion because I have a strong one of my own. If a GUI IDE helps you do what you do, that's fantastic. All the code I work with lives on Linux servers so I have to work with a Linux platform and the easiest way to do that is stick with what I have to run stuff on. So I don't develop locally. If I write Java I'll use Netbeans and VS for C#, but when it comes to editing scripts, I can't find much justification to use an IDE.

You can't have good advanced code completion with PHP anyways because the data can always mutate. Just because it was initially set to some class "Foobar" doesn't mean that at another point it won't be "Barfoo". Most dynamically typed languages have this problem and code completion really is best suited for languages like C# and Java, languages that are strongly typed, but when it comes to scripting languages like PHP and Ruby it very well could be incomplete. I too write php professionally and it all runs on a *nix server. At work I develop on a pair Ubuntu server and deploy to a pair RHEL servers.



digibucc said:


> honestly those sound like people who got used to one way of doing things and then found reasons to keep it. the only thing that makes sense is if you are already using terminal or you NEED to cli ssh for some reason. nothing else in that post is a good reason imo to keep using such an old method. this is NOT me bashing you, your skills, or your program. this is me saying I do not understand the reasoning and I wish that I could.
> 
> I've seen your code, you are better than me by miles. but that doesn't mean I'm just going to accept that your method is better when it doesn't seem that way to me. To me it seems more likely that you are just that much better, and if you used current software you could be even more efficient.



Not at all, there is a time and a place for everything. If you don't need a GUI, there is no reason to use it imho. I can't fathom why anyone would want to run PHP on a Windows server unless there is another piece of software you're using that needs Windows (except MSSQL, MSSQL and PHP together has always been a mess). That's just me though. I've heard horror stories about using PHP with MSSQL, and I can believe it after trying to use IIS with PHP. Also, why pay for Windows Server licenses if you can get away with Linux on your server? I do understand that not all software runs on *nix, so it's not always an option.

Also just because CLIs came first doesn't mean that they're obsolete.



digibucc said:


> And I say you are complicating it by using multiple programs or scripts when one program CAN do everything you need. I can edit a file, and with a single keystroke upload & preview it. I can set up the program to keep files in sync automatically. why would I EVER use rsync or write a script when the program I am already using to edit the file can do it all for me?



I didn't say complicate, I said complect. As in, to make compound.
The exact definition is:


			
				MerriamWebster Dictionary said:
			
		

> transitive verb
> : intertwine, embrace; esp : to plait together : interweave



I personally think that a lot of IDEs have a lot of features and have, quite frankly, snow balled by making any one particular tool overly complex (not necessarily complicated to use,) by having it do multiple things. I personally believe that having one tool for one job is the appropriate approach. That way each tool focuses on what it has to do well and by doing that you're not introducing interdependencies between different aspects of whatever application you're working on.

I just like simple tools that do simple things with scripts that put these simple parts together to do something complex. That's just a preference though.

I respect that you like GUI IDEs and such. I think there are some pretty good ones out there. My experiences with Netbeans for Java have been very good in fact, but as far as what I enjoy the most and has been consistently my favorite and best platform to use has been a cli with some from of *nix using vim as an editor.



Easy Rhino said:


> It doesn't surprise me that an open source project would use vim and emacs. I am not saying one is better than the other. Anyone who does so has never spent any significant amount of time developing in a large corporate environment.



The right tools for the right job, man. To validate your point, you're right. I haven't worked in a large corporate environment so I can't say, but I can say I have experience with small to medium sized teams, but even with teams up to 8-10 people you'll still see people using subversion or git with vim or some other editor.

I don't see either tool being better or worse in a larger environment when people know how to properly use the tools they need for either platform.

I'm just saying from my own personal experience, I've enjoyed working on the CLI on *nix more so than not, particularly with PHP and Ruby applications.

I apologize for my abrasive attitude for anyone who may be offended, I tend to have that effect on people. I don't mean to put anyone down, I just feel strongly about this. Remember, I'm talking about what I prefer, not what is better for all use cases. What might be better for me, might be completely different than what is good for someone else.


----------



## digibucc (May 7, 2013)

Aquinus said:


> I can't fathom why anyone would want to run PHP on a Windows server


no i should have been clearer. I only code I don't host myself, I use dedicated or shared lamp servers & just use windows as my os. since I work from home it's my work and personal machine, which is the main reason for using windows. even using linux though I just can't go as far as cli.



Aquinus said:


> Also just because CLIs came first doesn't mean that they're obsolete.


not necessarily obsolete, but I wonder other than small imprint what can they do that you can't configure an ide to do as well? you can use an ide just like a cli but with more features, no? to your next point though i do see it as a simple individual part.


Aquinus said:


> I didn't say complicate, I said complect. As in, to make compound.


and I thought I had a good vocabulary. I saw the red underline and didn't even bother to look it up. :shadedshu

but I definitely see your point, I just feel the opposite about it. If I can find one program I like to do multiple parts of the job, i don't need to find the individual parts. flashfxp + debug wamp stack + notepad++ was the closest I had come before moving to phpstorm. and I just needed a little bit more that wasn't available without imho pita plugins. not only do i like the editor in phpstorm better than notepad++, but it made my job a lot simpler by requiring less software juggling and letting me code more.



Aquinus said:


> I apologize for my abrasive attitude for anyone who may be offended, I tend to have that effect on people. I don't mean to put anyone down, I just feel strongly about this. Remember, I'm talking about what I prefer, not what is better for all use cases. What might be better for me, might be completely different than what is good for someone else.



same here. it really seems it is as simple as different opinions. I always try to understand ... sometimes that's the best answer I can get


----------



## Easy Rhino (May 7, 2013)

Aquinus said:


> That's what a version control system is for. Pretty sure I mentioned git before. It does a pretty good job at merging code together and telling you about conflicts. Also if you're merging in changes and you're not reviewing how they've been merged in, that bad to begin with. You don't need a GUI to manage a framework for you. More software than not has some thought about how code for any particular part of a project should be written, hence why projects like Moodle have guidelines you must follow to contribute code back upstream.



yes, that's true you can use Git or something similiar for control. But let's see you walk into a project halfway through and you need to review 100's of .class files with little to no documentation. a gui ide is prefect because you can quickly review those files using tabs and switch back and forth with no hassle. i am talking hundreds of .class files. then, if you are working with a compiled language like java try writing a .class file that imports a dozen or so other .class files and external jar's using the cli. And if you make a mistake or change one aspect of the code to recompile you have to reenter every single .class you want to include during compile time. an ide like netbeans/eclipse manages all of that for you.


----------



## Frick (May 7, 2013)

Aquinus said:


> http://www.techpowerup.com/forums/attachment.php?attachmentid=51040&stc=1&d=1367929653



OUch ouch black background, white power etc etc.


----------



## Aquinus (May 7, 2013)

Easy Rhino said:


> yes, that's true you can use Git or something similiar for control. But let's see you walk into a project halfway through and you need to review 100's of .class files with little to no documentation. a gui ide is prefect because you can quickly review those files using tabs and switch back and forth with no hassle. i am talking hundreds of .class files. then, if you are working with a compiled language like java try writing a .class file that imports a dozen or so other .class files and external jar's using the cli. And if you make a mistake or change one aspect of the code to recompile you have to reenter every single .class you want to include during compile time. an ide like netbeans/eclipse manages all of that for you.



Lack of documentation is the fault of the developer. Every method, class variable, and class should be documented imho (I also think that Netbeans will read javadoc style comments for auto-completion documentation). If it's not you're just making it harder regardless of what IDE you use.

VIM lets you have multiple files open and lets you switch between them as well as slitting the screen as well as showing diffs. (Man, I love vim-diff,) but on top of that you can use ctags with vim with languages like php where all you need to do is select a keyword, press ctrl+] and it will open the file and show you where that word is defined. So without any gui at all, I was just able to navigate classes by method with a two button keystroke. I don't call that bad at all.

Also I think I mentioned how there are some languages where GUI IDEs work well, java is one of them. I happen to like Netbeans when I write Java myself, but I'm speaking generally here, as a tool, vim lets you do many things very quickly. As primarily a web developer who writes php, ruby, and bash, I have some incentives to want to use vim.

If I were to write Java, I would rather have real code completion and the ease of navigating Java APIs instead. I think I would want that for almost any strictly typed language to be honest.

So let me rephrase, I like vim for writing scripts. I like GUI IDEs when I use strictly typed and compiled languages.


Frick said:


> OUch ouch black background, white power etc etc.


What? I think TPU is in a browser under that screenshot, so the light background is probably TPU. I use black on white or white on black depending on the ambient lighting and which ever I feel like using.


----------



## Easy Rhino (May 7, 2013)

Aquinus said:


> So let me rephrase, I like vim for writing scripts. I like GUI IDEs when I use strictly typed and compiled languages.



that is exactly where i was going with that.


----------



## Castiel (May 8, 2013)

Aquinus said:


> I like vim for writing scripts. I like GUI IDEs when I use strictly typed and compiled languages.



I tried this before, using the same method. But I just feel weird while using vim, to the point that it is old, and hasn't been updated so much. I just find myself sticking with GUI IDE's.


----------



## Aquinus (May 8, 2013)

Castiel said:


> I tried this before, using the same method. But I just feel weird while using vim, to the point that it is old, and hasn't been updated so much. I just find myself sticking with GUI IDE's.



Weird doesn't mean that it's worse. Vi is old, VIM is less old but the version I'm running isn't even a year old so, no, you're wrong. 

It has a steeper learning curve, but it doesn't mean that it isn't a good option. There is more to remember, that's definitely true but like anything else, you get better at what you use a lot and the added advantage to having a GUI is that you can visually search for what you want as opposed to figuring out what commands or keystroke combinations you have to make to do any one particular thing, but on the other hand on a command line editor, most actions you'll do are within one or two keystrokes so the time it takes to do any one thing can be less if you know what you're doing.

As I said before, I would use a GUI editor for something like Java or C# but for a scripting or command languages, VIM is pretty powerful for things like Ruby, PHP, and BASH. Not knowing how to use a tool is not the fault of the tool. Hard to learn doesn't imply hard to use. 

Learning VIM is like learning regular expressions. You don't get very good at it unless you use it practically and you use it a lot.


----------



## librin.so.1 (May 8, 2013)

Castiel said:


> I tried this before, using the same method. But I just feel weird while using vim, to the point that it is old, and hasn't been updated so much. I just find myself sticking with GUI IDE's.



Read this.


----------

