diff --git a/pkg/utils/newparser.go b/pkg/utils/newparser.go
deleted file mode 100644
index 8bb2fa5d0dac29305f8c9916d080f0744da1f67b..0000000000000000000000000000000000000000
--- a/pkg/utils/newparser.go
+++ /dev/null
@@ -1,274 +0,0 @@
-package utils
-
-import (
-	"bytes"
-	"unicode/utf8"
-)
-
-type TerminalParser struct {
-	// Escape contains a pointer to the escape codes for this terminal.
-	// It's always a valid pointer, although the escape codes themselves
-	// may be empty if the terminal doesn't support them.
-	Escape *EscapeCodes
-
-	// line is the current line being entered.
-	line []rune
-	// pos is the logical position of the cursor in line
-	pos int
-	// pasteActive is true iff there is a bracketed paste operation in
-	// progress.
-	pasteActive bool
-
-	// maxLine is the greatest value of cursorY so far.
-	maxLine int
-
-	// remainder contains the remainder of any partial key sequences after
-	// a read. It aliases into inBuf.
-	remainder []byte
-	inBuf     [256]byte
-}
-
-func NewTerminalParser() TerminalParser {
-	return TerminalParser{
-		Escape: &vt100EscapeCodes,
-	}
-}
-
-func (t *TerminalParser) ParseLines(p []byte) (lines []string, isOk bool) {
-	c := bytes.NewReader(p)
-	var err error
-	isOk = true
-	lineIsPasted := t.pasteActive
-	var line string
-	lines = make([]string, 0, 10)
-	for {
-		rest := t.remainder
-		lineOk := false
-		for !lineOk {
-			var key rune
-			key, rest = bytesToKey(rest, t.pasteActive)
-			if key == utf8.RuneError {
-				break
-			}
-			if !t.pasteActive {
-				if key == keyCtrlD {
-					if len(t.line) == 0 {
-						// as key has already handled, we need update remainder data,
-						t.remainder = rest
-						return
-					}
-				}
-				if key == keyPasteStart {
-					t.pasteActive = true
-					if len(t.line) == 0 {
-						lineIsPasted = true
-					}
-					continue
-				}
-			} else if key == keyPasteEnd {
-				t.pasteActive = false
-				continue
-			}
-			switch key {
-			case keyUp:
-				runes := []rune("")
-				t.setLine(runes, len(runes))
-				isOk = false
-				continue
-			case keyDown:
-				runes := []rune("")
-				t.setLine(runes, len(runes))
-				isOk = false
-				continue
-			}
-
-			if !t.pasteActive {
-				lineIsPasted = false
-			}
-			line, lineOk = t.handleKey(key)
-		}
-		if len(rest) > 0 {
-			n := copy(t.inBuf[:], rest)
-			t.remainder = t.inBuf[:n]
-		} else {
-			t.remainder = nil
-		}
-		if lineOk {
-			if lineIsPasted {
-				err = ErrPasteIndicator
-			}
-			lines = append(lines, line)
-		}
-
-		// t.remainder is a slice at the beginning of t.inBuf
-		// containing a partial key sequence
-		readBuf := t.inBuf[len(t.remainder):]
-		var n int
-
-		n, err = c.Read(readBuf)
-
-		t.remainder = t.inBuf[:n+len(t.remainder)]
-		if n == 0 && err != nil && len(t.remainder) == 0 {
-			lines = append(lines, string(t.line))
-			return
-		}
-	}
-}
-
-func (t *TerminalParser) eraseNPreviousChars(n int) {
-	if n == 0 {
-		return
-	}
-
-	if t.pos < n {
-		n = t.pos
-	}
-	t.pos -= n
-
-	copy(t.line[t.pos:], t.line[n+t.pos:])
-	t.line = t.line[:len(t.line)-n]
-}
-
-func (t *TerminalParser) countToLeftWord() int {
-	if t.pos == 0 {
-		return 0
-	}
-
-	pos := t.pos - 1
-	for pos > 0 {
-		if t.line[pos] != ' ' {
-			break
-		}
-		pos--
-	}
-	for pos > 0 {
-		if t.line[pos] == ' ' {
-			pos++
-			break
-		}
-		pos--
-	}
-
-	return t.pos - pos
-}
-
-func (t *TerminalParser) countToRightWord() int {
-	pos := t.pos
-	for pos < len(t.line) {
-		if t.line[pos] == ' ' {
-			break
-		}
-		pos++
-	}
-	for pos < len(t.line) {
-		if t.line[pos] != ' ' {
-			break
-		}
-		pos++
-	}
-	return pos - t.pos
-}
-
-func (t *TerminalParser) setLine(newLine []rune, newPos int) {
-	t.line = newLine
-	t.pos = newPos
-}
-
-func (t *TerminalParser) handleKey(key rune) (line string, ok bool) {
-	if t.pasteActive && key != keyEnter {
-		t.addKeyToLine(key)
-		return
-	}
-
-	switch key {
-	case keyBackspace:
-		if t.pos == 0 {
-			return
-		}
-		t.eraseNPreviousChars(1)
-	case keyAltLeft:
-		// move left by a word.
-		t.pos -= t.countToLeftWord()
-	case keyAltRight:
-		// move right by a word.
-		t.pos += t.countToRightWord()
-	case keyLeft:
-		if t.pos == 0 {
-			return
-		}
-		t.pos--
-	case keyRight:
-		if t.pos == len(t.line) {
-			return
-		}
-		t.pos++
-	case keyHome:
-		if t.pos == 0 {
-			return
-		}
-		t.pos = 0
-	case keyEnd:
-		if t.pos == len(t.line) {
-			return
-		}
-		t.pos = len(t.line)
-	case keyUp:
-		runes := []rune("")
-		t.setLine(runes, len(runes))
-	case keyDown:
-		runes := []rune("")
-		t.setLine(runes, len(runes))
-	case keyEnter:
-		line = string(t.line)
-		ok = true
-		t.line = t.line[:0]
-		t.pos = 0
-		t.maxLine = 0
-	case keyDeleteWord:
-		// Delete zero or more spaces and then one or more characters.
-		t.eraseNPreviousChars(t.countToLeftWord())
-	case keyDeleteLine:
-		// Delete everything from the current cursor position to the
-		// end of line.
-		//for i := t.pos; i < len(t.line); i++ {
-		//	t.advanceCursor(1)
-		//}
-		t.line = t.line[:t.pos]
-	case keyCtrlD:
-		// Erase the character under the current position.
-		// The EOF case when the line is empty is handled in
-		// readLine().
-		if t.pos < len(t.line) {
-			t.pos++
-			t.eraseNPreviousChars(1)
-		}
-	case keyCtrlU:
-		t.eraseNPreviousChars(t.pos)
-	case keyClearScreen:
-		// Erases the screen and moves the cursor to the home position.
-		//t.cursorX, t.cursorY = 0, 0
-		//t.advanceCursor(visualLength(t.prompt))
-		t.setLine(t.line, t.pos)
-	default:
-		if !isPrintable(key) {
-			return
-		}
-		if len(t.line) == maxLineLength {
-			return
-		}
-		t.addKeyToLine(key)
-	}
-	return
-}
-
-func (t *TerminalParser) addKeyToLine(key rune) {
-	if len(t.line) == cap(t.line) {
-		newLine := make([]rune, len(t.line), 2*(1+len(t.line)))
-		copy(newLine, t.line)
-		t.line = newLine
-	}
-	t.line = t.line[:len(t.line)+1]
-	copy(t.line[t.pos+1:], t.line[t.pos:])
-	t.line[t.pos] = key
-	t.pos++
-}
diff --git a/pkg/utils/parser.go b/pkg/utils/parser.go
index e3fa06bcfaf1a5c6c1d9b6bf26042479897136be..5c7f6a35778dd8be210c85d89df1704e6f48240f 100644
--- a/pkg/utils/parser.go
+++ b/pkg/utils/parser.go
@@ -7,8 +7,6 @@ package utils
 import (
 	"bytes"
 	"unicode/utf8"
-
-	"github.com/jumpserver/koko/pkg/logger"
 )
 
 
@@ -291,7 +289,6 @@ func (t *terminalParser) parseLines(p []byte) (lines []string) {
 			return
 		} else if err == nil && n == 0 {
 			if len(t.remainder) == len(t.inBuf) {
-				logger.Errorf("~~ 发生卡顿问题 ~~")
 				t.remainder = t.remainder[1:]
 				continue
 			}